<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Tomhalloin on Medium]]></title>
        <description><![CDATA[Stories by Tomhalloin on Medium]]></description>
        <link>https://medium.com/@tomhalloin?source=rss-f72801f895b1------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*IxeZafbC3Z8zhYMUe5dJjA.jpeg</url>
            <title>Stories by Tomhalloin on Medium</title>
            <link>https://medium.com/@tomhalloin?source=rss-f72801f895b1------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 28 May 2026 03:13:45 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@tomhalloin/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[I asked ChatGPT 4 to create a logo — Here is how it did]]></title>
            <link>https://medium.com/@tomhalloin/i-asked-chatgpt-4-to-create-a-logo-here-is-how-it-did-579b3186ab1d?source=rss-f72801f895b1------2</link>
            <guid isPermaLink="false">https://medium.com/p/579b3186ab1d</guid>
            <category><![CDATA[generative-art]]></category>
            <category><![CDATA[chatgpt4]]></category>
            <dc:creator><![CDATA[Tomhalloin]]></dc:creator>
            <pubDate>Mon, 25 Mar 2024 16:35:41 GMT</pubDate>
            <atom:updated>2024-03-27T12:43:23.999Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>I asked ChatGPT 4 to create a logo for me — Here is how it did</strong></h3><p>I am no artist.</p><p>My drawing skills consist of stick figures.</p><p>When my local ultimate frisbee league held a contest for a new logo, I turned to my new friend ChatGPT-4 for help. I wanted to have a theme of playfulness and inclusivity and include some hometown flavors.</p><p>Here was my initial prompt:</p><blockquote>Draw a mascot for a summer ultimate frisbee league. The theme should be “The Dog Days of Summer” using the face of a dog with a frisbee in its mouth. Incorporate the words “SPUFA Summer League 2024” on the collar of the dog. For the dog itself, incorporate ideas from poodles (maybe the ears), college mascots, pointer dogs, and anime characters or Pokémon. Include large, expressive eyes. The logo itself will be printed on a frisbee, so make the image circular. Please use no more than 7 colors when drawing the design, including white. There is no need for a background color.</blockquote><p>Here was ChatGPT’s response:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YhGlqWoxncMTsxOPg0uwTA.png" /><figcaption>ChatGPT’s first response</figcaption></figure><p>This was a great start, much better than stick figures. There were obvious issues, though — note all of the misspellings.</p><p>Here was my next prompt:</p><blockquote>This is a great start! Some of the text is misspelled, though.</blockquote><p>And ChatGPT did its job:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uRD2PhhqR1G4a9e0kYjLfw.png" /><figcaption>ChatGPT trying to pass first-grade spelling</figcaption></figure><p>Two observations here:</p><p>1.) The text is now spelled correctly, but there are some weird characters between the F and the A of SPUFA, and the first “M” in “Summer League” has an extra point.</p><p>2.) ChatGPT completely recreated a new image instead of making minor tweaks to the old image as requested.</p><p>I replied to ChatGPT with this:</p><blockquote>This is a step in the right direction, but I liked the look of the first dog better.</blockquote><p>Its response:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rzYbsG5-6inebFhfMTrPjw.png" /><figcaption>Instead of recreating the first dog, ChatGPT creates a new one.</figcaption></figure><p>After this, ChatGPT and I went back and forth with a few more iterations, getting nowhere until it produced something amazing:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ZX7D0Q19OLCWamDy9V40MQ.png" /><figcaption>ChatGPT produces an outstanding image that I tweaked with Photoshop.</figcaption></figure><p>I called this good enough and went to my friends Photoshop and Microsoft Paint for some final touches. I cut down on the number of colors and removed the dot on the forehead. Most importantly, I fixed the spelling of “Summer”, “League”, and “SPUFA”.</p><p>Below is the contest-winning version that will be on the frisbees this summer:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*DRi9ADfjUXaNsQl7Y5er0w.png" /><figcaption>We have a winner!</figcaption></figure><p>Some takeaways:</p><p>1.) ChatGPT created outstanding ideas and accelerated the creative process.</p><p>2.) ChatGPT does not replace human intervention (yet). Things that are easy for humans can be hard for ChatGPT and vice versa. I would not expect it to create images with correct spelling even with explicit prompting.</p><p>3.) The prompt quality matters. ChatGPT is not a mind reader and outsourcing all thinking would be a mistake.</p><p>ChatGPT and its competitors are tools that will define the next decade. They will get better with each iteration. However, humans must check their work and give ideas for output.</p><p>Humans are not obsolete yet, even those with stick figure drawing skills.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=579b3186ab1d" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Filling Out Your NCAA Tournament Bracket the Hard Way]]></title>
            <link>https://medium.com/@tomhalloin/filling-out-your-ncaa-tournament-bracket-the-hard-way-635a98afca61?source=rss-f72801f895b1------2</link>
            <guid isPermaLink="false">https://medium.com/p/635a98afca61</guid>
            <category><![CDATA[ncaa-basketball]]></category>
            <category><![CDATA[march-madness]]></category>
            <dc:creator><![CDATA[Tomhalloin]]></dc:creator>
            <pubDate>Tue, 19 Mar 2024 13:46:23 GMT</pubDate>
            <atom:updated>2024-03-27T12:45:08.882Z</atom:updated>
            <content:encoded><![CDATA[<p>There is nothing wrong with using “the easy way” — using trends and hunches — to fill out your NCAA bracket. Your hot take that Cinderella will reach the Final Four might win your NCAA tournament pool, but a solid model will beat pure guessing more times than not. Gut feelings also do not scale for Kaggle competitions, where in a new twist this year contestants must submit a portfolio of brackets, and the contestant with the highest average bracket score wins. I plan to build my model with this competition in mind.</p><p>In last year’s Kaggle competition to predict the NCAA tournament games, <a href="https://www.kaggle.com/code/theoviel/ncaa-starter-the-simpler-the-better">one of the most popular submissions</a> used only seeds, winning percentage, and scoring margin to dominate the top ten percent of submissions. This model also earned 2nd place in Kaggle’s 2018 NCAA Women’s March Madness competition.</p><p>I first released my Kaggle notebook <a href="https://www.kaggle.com/code/toshimelonhead/ncaa-march-madness-sabermetric-spin">“NCAA March Madness: Sabermetric Spin”</a> in 2021 as a response to these simpler models to see if adding basketball statistics would improve predictive accuracy both for the Kaggle competition and my personal bracket. Last year I made a sequel that <a href="https://www.kaggle.com/code/toshimelonhead/ncaa-march-madness-sabermetric-spin-v2">combines the men’s and women’s tournaments</a>.</p><p>I won’t share the entire secret sauce in this article just yet as I plan to enter the Kaggle competition myself, but family members have been begging to use my bracket in their family pools. For their sake I will make my one “sheet of integrity” that I will build using my model public, knowing full well that simple is better than complex and complex is better than complicated.</p><p>The model is a hodgepodge of several different models. Baseball started the “Moneyball” trend of using advanced statistics to try and create a competitive advantage long before Brad Pitt starred on the silver screen, and basketball has embraced this trend. One of the original sabermetric ideas comes from Bill James and the <a href="https://en.wikipedia.org/wiki/Pythagorean_expectation">Pythagorean Expectation</a>. For those traumatized from past math classes, it is a way to compute the relative record of a team using the ratio of points scored and allowed boiled down into one number using the Pythagorean Theorem and this same idea can work for just road games or games in the fourth quarter of the season to account for teams that get hot at the end of the season. For those not traumatized by past math classes, the model includes special features for you, too.</p><p><a href="https://en.wikipedia.org/wiki/Arpad_Elo">Arpad Elo</a> created the <a href="https://en.wikipedia.org/wiki/Elo_rating_system">Elo Rating system</a> to rate chess players, and this system can be adapted to rate other entities in competitions where there is a winner and a loser. Without diving into the mathematical weeds (see the Wikipedia article), each player or team starts with a base score and gains points over time with each win or loss. Ratings change more after wins against contestants with higher Elo ratings and vice versa.</p><p>There are adaptations beyond the standard vanilla Elo model that cater to basketball. I tweaked the standard Elo model so that overtime games do not count the same as games that end in regulation.</p><p>To account for a team’s strength of schedule, I take the ending Elo rating of each team an opponent plays during the season and average them to create a team’s Average Opponent Elo Rating. The NCAA recently started using “Quad 1 Wins” as a metric — wins against the top quarter of ranked teams. The Elo system can provide the same metric by finding wins against the top quarter of teams ranked by Elo score. In addition to using a team’s Elo rating for each season, I also want to consider a school’s Elo rating continually updated over time, with a decay factor to account for roster turnover.</p><p>Basketball has its own statistics and point system that can provide additional features for a statistical model. The Kaggle dataset includes a history of all regular season box score statistics to mine. I see nothing wrong in using as many of these statistics in the final model and see what works. I also felt inspired by <a href="https://www.amazon.com/Basketball-Paper-Rules-Performance-Analysis/dp/1574886886">Dean Oliver’s Basketball on Paper</a>, where he identifies four factors of basketball success: effective field goal percentage, turnover percentage, offensive rebound percentage, and free throw rate. The regular season box score data can provide the foundation to compute these for each team. These statistics are aggregated into season averages.</p><p>Once I have this collection of Elo ratings, sabermetrics, and aggregated box score statistics, I take each historical NCAA tournament matchup since 2003 and compute the differences in each feature between each team. I feed all these features into two machine-learning models stacked together, using 2003–2018 as training data and tournament games from 2019–2023 as a validation set. Last year, I added women’s NCAA tournament games, and this year, I added secondary tournament games such as the NIT as additional training data. I can compute probabilities from this model for each possible NCAA tournament matchup and fill out a bracket.</p><p>The model produces almost a chalk bracket over 100,000 simulations. That works for a portfolio of brackets, but not as well for a single submission. Since I am allowed two submissions in Kaggle’s competition, I created two models: one with seeds included and one that does not use seeds to incentivize some upsets within reason. The brackets below are from the model that does not use seeds. Good luck filling out your brackets this March Madness, and may the odds be ever in your favor.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/765/1*AuFU3n6HUFf6cqoI-ToJXw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/766/1*tHDz3yilYo4gdkVRubcDSQ.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=635a98afca61" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>