Author: /u/AFL_gains
|
Hi r/datascience! I wanted to share a fun little project I did over a few weekends analysing data from the radio! It doesn’t have much (if any) business value, and honestly I’m not sure it’s really novel in any particular way. But I wanted to share it because data science these days is all “AI this”, “language model that”, “job market”, “Claude”, whatever and I just wanted to do something a bit more traditional and scratch an itch I’ve had for a while. (Full disclosure: the project did actually use some AI models, so I’m not saying AI is bad, it’s a tool I used like everything else.) I don’t have a blog or anything I can post this on, so apologies for the Reddit write-up. I hope you enjoy it. BackgroundI drive a 20-year-old car. It’s so old it doesn’t have an MP3 player, or an AUX port to plug in an iPhone or anything. It just has a CD player and an analogue radio. It’s not even digital, so I can’t even get digital radio stations. So when I’m driving, which turns out to be quite a bit, I’m forced to listen to the good old-fashioned radio more than I’d like. In Sydney where I live, there are really only a handful of FM/AM radio stations, so choice is pretty limited. As I flick through the stations, there are a LOT of ads, which surprised me. Who is listening to this? Clearly it’s quite popular. And as I listened, I started wondering things like: how long do the ads run, how does their timing compare across different stations*, and are they correlated with ads on other stations? Just anecdotally, so many times I’ve literally flicked through all the FM stations and there’s an ad playing on every one… and sometimes it’s the same ad! I also had a hunch that there are more ads at the top of the hour than the bottom. It made intuitive sense, but I needed to prove it. Sydney has 11 main analogue stations split into AM and FM:* AM is mostly talkback radio, FM is mostly music. On AM you’ve got 2GB, 2SM, 2CH and ABC 702 (news, talkback and sport). On FM there’s KIIS, 2Day, Nova, Smooth, WSFM, Triple M and Triple J (pop, rock and music). Two of them, ABC 702 and Triple J, are run by our public broadcaster (think BBC), so they run no ads at all. The SetupSo one weekend I wrote some scripts to sample and record all the Sydney radio stations I could. The setup was basically the following:
Why every ~3 minutes? A full cycle (record all 11 stations, transcribe each one with Whisper, then classify it) takes a couple of minutes on a single CPU, because Whisper works through the clips one at a time. So ~3 minutes is about as fast as I could sustainably sample without the cycles piling up on each other. I also added a bit of random jitter to the interval so I wasn’t always sampling at the exact same offset within the hour. Otherwise you can accidentally “phase-lock” to a station’s ad breaks and bias the whole thing. A few hurdles I encounteredA few things genuinely tripped me up:
ResultsHere are some of the more interesting results I found analysing the data afterwards: OverallFirst, the big picture. Every station has its own personality. The FM stations are mostly music, the AM stations are mostly talk, and the two ABC stations (ABC 702 and Triple J) carry basically no ads at all, which makes sense since they’re publicly funded. Across the commercial stations, ads make up somewhere around a sixth of the airtime. And you can already see the ad load isn’t flat: it ramps up through the day and quietens off overnight. Question 1: Probability of an ad relative to the top of the hourHere’s the frequency of finding an ad within ±30 minutes of the top of the hour. So, I was right! Definitely higher the closer to the hour, but the strategy is more interesting than I expected. The spike actually lands in the ~5 minutes before the hour (the ad break right before the top-of-hour news bulletin), and an ad is roughly 2x more likely there than mid-hour. The quietest stretch is around 10 to 15 minutes past the hour, so if you want to dodge ads, that’s your window. Question 2: Ad co-occurrence and correlationThe thing I really wanted to know: do the stations gang up and all play ads at the same time, so there’s nowhere to flick to? I lined up every station by the cycle it was sampled in and correlated their ad status. The answer is yes and no. No in the sense that it’s never a total blackout: all nine commercial stations being in an ad at the exact same moment literally never happened across the whole two days, and on average only about 1.6 of the 9 are mid-ad at any given time. So there’s almost always somewhere to escape to. But the conditional probability charts says that some stations really do move together. The best example is if Smooth is playing an ad, there’s a 50% chance WSFM is too, which is double WSFM’s baseline of 26%. A bunch of the commercial FM pairs show this same ~2x jump. But, when I looked it up, Smooth and WSFM are owned by different companies, so this isn’t networks coordinating behind the scenes, probably more of the “top-of-the-hour” effect from Question 1 manifesting somewhere else. Question 3: The strategy difference between AM and FMWhen I split “time between ads” by band, the two run completely different playbooks. The FM (music) stations dump their ads in clusters. You get a big spike of back to back breaks, with a typical gap of about 9 minutes. The AM (talk and sport) stations space them out evenly, one break at a time. 2GB is almost metronomic at roughly 7 to 12 minutes, with hardly any back to back ads at all. You can actually see it if you zoom into a few hours of the timeline: Look at the FM lanes (KIIS, Nova, Triple M, WSFM, 2Day): the orange ad blocks come in pairs, clustered together. Now look at the AM lanes (2GB, 2SM): single, evenly spaced blocks. And ABC 702 and Triple J are just grey the whole time, because they don’t run ads. Question 4: Which companies still advertise through this medium?I also had the language model pull the advertiser out of each ad, so I could see who’s actually buying radio airtime in 2026. The most-heard advertisers were Virgin Australia (an airline), Australia Post (basically our USPS), Harvey Norman (a big electronics and furniture retailer) and Chemist Warehouse (a discount pharmacy chain). The neat bit is the targeting: car brands and finance go to the AM talk stations (older crowd), while retail and telco lean FM. Australia Post ran almost entirely on the Nova network. Question 5: What about the talking?The non-ad content is either music or talking, and I got curious about what they actually talk about. So I classified every talking snippet into a topic. The AM stations (ABC, 2GB, 2SM) are wall to wall news, politics and sport. The music FMs are mostly DJ banter, celebrity gossip and chat about music, with almost no news at all. For a bit of fun, I also made a map of everything said on the radio. I embedded every talking snippet into a vector, laid them all out in 2D with t-SNE so that similar snippets sit near each other, then coloured each point by its topic. Sport, traffic and world news each form their own tight little islands (they use very consistent, formulaic language), while the DJ banter is one big diffuse cloud in the middle (because it’s about nothing in particular). The neat part is that the position and the colour are decided completely separately. The position comes only from the text embeddings, and the colour comes from a separate classification step. So the fact that same-coloured points cluster together is real corroboration, not something circular. ConclusionIn conclusion, this was a fun, meaningless project that allowed me to make some pretty charts and talk for a bit about the results. Thanks for reading! submitted by /u/AFL_gains |