Using an ML model to Improve Predictions ✨🔮

TLDR: As of 24/01/2023, 12PM AEDT, the default view of 100 Warm Tunas will display results with an ML model applied to them, in their new order. Results which have changed ranks due to the adjustment will be marked with text "✨ ML Model Applied", along with the original rank:

Example of a result where ranks have changed due to adjustment

Example of a result where ranks have changed due to adjustment

The vote counts displayed on the prediction will continue to be the true number of votes collected. You can opt out of ML applied ordering by using the controls overlay.

We hope you enjoy these improvements to 100 Warm Tunas. If you want to show your appreciation for the work that I do, you can help contribute to the project by buying me a coffee ☕️.


A Deep Dive into 100 Warm Tunas ML Model

100 Warm Tunas collects voting slips posted by people to various social networks, and tallies the votes for each song to produce an overall prediction.

This method of collecting data has a potential downside - selection bias. Selection bias occurs when the sample of data that is collected is not representative of the entire population. In this case, the sample of voting slips that is collected only represents a small percentage of the total number of votes, which means that the results may not be representative of the entire population of voters

Over the last 6 years, we've seen a handful of patterns emerge in the predictions which 100 Warm Tunas provides. Many of our users also are aware of this. For example, 100 Warm Tunas will frequently rank Australian rock tracks significantly higher than they place on Hottest 100 day.

Having 6 years of historical data puts us in a unique position. We have information about how the algorithm predicted songs and can compare this to how the song actually placed (error). This information can be used to train an ML model to predict error in new, unseen datasets and adjust for biases that may exist in the data that we collect.

So first, you might be wondering what ML is? Machine learning (ML) is a method of teaching computers to learn from data, without being explicitly programmed. It is a type of artificial intelligence that allows computers to automatically improve their performance with experience. The algorithm is presented with a dataset, which includes input data and the corresponding correct output. The computer uses this dataset to learn mappings and patterns from inputs (features) to outputs (labels). Once the model has learned this mapping, it can be used to make predictions on new, unseen data.

For 100 Warm Tunas, we can train a model to attempt to predict the error based on previous countdown results. This is considered a regression problem (the aim is to predict the output of a continuous value). Contrast this with a classification problem, where the aim is to select a class from a list of classes.

For every countdown, we have the following data:

songartistsrank_predictedvote_countrank_actualrank_error
Elephant [triple j Like A Version 2021]The Wiggles154110
the angel of 8th ave.Gang of Youths247864
StayThe Kid LAROI, Justin Bieber33522-1
good 4 uOlivia Rodrigo428940
Kiss Me More [Ft. SZA]Doja Cat, SZA526972
On My KneesRÜFÜS DU SOL626993
Lots Of NothingSpacey Jane72653-4
HertzAmyl and The Sniffers82562820
Happier Than EverBillie Eilish92555-4
SunscreenBall Park Music102352111

Using this data, we can then extrapolate the number of votes required for a given song to have been predicted in the correct position:

songrank_predictedrank_actualvote_countvote_count_for_resultvote_count_error
Elephant [triple j Like A Version 2021]115415410
the angel of 8th ave.26478269-209
Stay32352478126
good 4 u442892890
Kiss Me More [Ft. SZA]57269265-4
On My Knees69269255-14
Lots Of Nothing7326535287
Hertz828256145-111
Happier Than Ever9525526914
Sunscreen1021235162-73

However, in this instance, vote_count_error is absolute. We must normalise this to be relative to the vote count in order for neural network to correctly identify patterns.

songrank_predictedrank_actualvote_countvote_count_for_resultvote_count_error
Elephant [triple j Like A Version 2021]115415410
the angel of 8th ave.26478269-0.437238
Stay323524780.357955
good 4 u442892890
Kiss Me More [Ft. SZA]57269265-0.0148699
On My Knees69269255-0.0520446
Lots Of Nothing732653520.328302
Hertz828256145-0.433594
Happier Than Ever952552690.054902
Sunscreen1021235162-0.310638

In order to actually build a model, we must also have some inputs (features). We've used some of the following features to train the model:

  • Artist (To account for patterns of artist bias found in the sample)
  • Artist Genre (To account for patterns of genre bias found in the sample)
  • Duration
  • Tempo
  • Predicted rank
  • Various Spotify Attributes
songartistsgenresduration_mstempodanceability
Elephant [triple j Like A Version 2021]The Wigglesaustralian children's music, children's music202293127.8870.513
the angel of 8th ave.Gang of Youthsaustralian indie, modern rock23865389.5510.463
StayThe Kid LAROI, Justin Bieberaustralian hip hop, pop, rap141805169.9280.591
good 4 uOlivia Rodrigopop178146166.9280.563
Kiss Me More [Ft. SZA]Doja Cat, SZAdance pop, pop208866110.9680.762
On My KneesRÜFÜS DU SOLaustralian electropop, edm, indietronica261001120.0440.683
Lots Of NothingSpacey Janeaustralian indie rock, fremantle indie, perth indie196533139.9850.58
HertzAmyl and The Sniffersaustralian garage punk153800184.6570.329
Happier Than EverBillie Eilishart pop, electropop, pop29889981.0550.332
SunscreenBall Park Musicaustralian indie, australian pop, brisbane indie250116151.1550.348

With these inputs (features), and known good outputs (labels), we can now train a model. Once the model is trained, it can then be tested on a validation set, which was subtracted from the dataset prior to training in order to test its performance.

The following diagram demonstrates how closely the model is able to predict the vote count error for the previously extracted validation set. The closer to the blue line, the more accurate the predicted adjustment is:

Validation set fit

Validation set fit

We can also take a look generally at how all of the training data looks when plotted:

Training data fit

Training data fit

Finally, as one last test, we re-train the model, except this time reserving the 2021 countdown data as our validation set:

Unseen 2021 data fit

Unseen 2021 data fit

Armed with a trained model, we can then apply it to our unseen data (2022's predictions) which we have no known good/expected output (vote_count_error):

songrank_predictedvote_countvote_count_error_pred
in the wake of your leave1803
Stars In My Eyes2727
Say Nothing [Ft. MAY-A]3653
Hardlight4652
New Gold [Ft. Tame Impala/Bootie Brown]5555
Sitting Up6475
Camp Dog7444
Girl Sports8444
This Is Why9434
Delilah (pull me out of this)10432
Let's Go11426
B.O.T.A. (Baddest Of Them All)12419
Get Inspired13399
Bad Habit14333
Backseat Of My Mind15270
Glimpse of Us16263
It's Been A Long Day17257
God Is A Freak18251
sTraNgeRs19244
About Damn Time20237
Stranger Days21233
Shooting Stars [Ft. Toro y Moi] [LaV 2022]22223
Kamikaze23212
GAY 4 ME [Ft. Lauren Sanderson]24210
I Don't Wanna Do Nothing Forever25209

For every song, we use the model to produce a prediction of vote count error:

songrank_predictedvote_countvote_count_error_pred
in the wake of your leave1803-0.0933938
Stars In My Eyes2727-0.115812
Say Nothing [Ft. MAY-A]36530.172421
Hardlight4652-0.1654
New Gold [Ft. Tame Impala/...5555-0.0370119
Sitting Up6475-0.156502
Camp Dog7444-0.452626
Girl Sports8444-0.103302
This Is Why9434-0.296301
Delilah (pull me out of this)10432-0.0390645
Let's Go11426-0.447287
B.O.T.A. (Baddest Of Them All)12419-0.0521578
Get Inspired13399-0.488084
Bad Habit143330.0223163
Backseat Of My Mind15270-35659.8
Glimpse of Us162630.000728694
It's Been A Long Day17257-0.16067
God Is A Freak18251-0.0245248
sTraNgeRs19244-0.45165
About Damn Time20237-0.268104
Stranger Days212330.0580958
Shooting Stars [Ft. Toro y Moi...22223nan
Kamikaze23212-0.240986
GAY 4 ME [Ft. Lauren Sanderson]24210-0.192271
I Don't Wanna Do Nothing Forever25209-0.332453

The predicted vote count error is then applied to each of the songs known vote_count in the prediction to produce a new, adjusted vote count. For the top 15 predicted tracks, the adjustment is applied 100%. Between 15 and 25 the adjustment is blended into the mean of whole adjustment dataset. Finally, the remaining tracks (ranks >25) adjusted by the mean of the whole adjustment dataset:

songrank_predictedvote_countvote_count_error_predvote_count_error_pred_blendscaled_count
Say Nothing [Ft. MAY-A]36530.1724210.172421766
in the wake of your leave1803-0.0933938-0.0933938728
Stars In My Eyes2727-0.115812-0.115812643
Hardlight4652-0.1654-0.1654544
New Gold [Ft. Tame Impala/Boot...5555-0.0370119-0.0370119534
Delilah (pull me out of this)10432-0.0390645-0.0390645415
Sitting Up6475-0.156502-0.156502401
Girl Sports8444-0.103302-0.103302398
B.O.T.A. (Baddest Of Them All)12419-0.0521578-0.0521578397
Bad Habit143330.02231630.0223163340
This Is Why9434-0.296301-0.296301305
Glimpse of Us162630.0007286940.000728694263
Camp Dog7444-0.452626-0.452626243
God Is A Freak18251-0.0245248-0.0438179240
Backseat Of My Mind15270nan-0.12099237
Let's Go11426-0.447287-0.447287235
Stranger Days212330.0580958-0.0314472226
It's Been A Long Day17257-0.16067-0.156702217
Get Inspired13399-0.488084-0.488084204
Shooting Stars [Ft. Toro y Moi...22223nan-0.12099196
About Damn Time20237-0.268104-0.209259187
GAY 4 ME [Ft. Lauren Sanderson]24210-0.192271-0.135246182
Am I Ever Gonna See Your Face ...26205nan-0.12099180
Kamikaze23212-0.240986-0.156989179
I Don't Wanna Do Nothing Forever25209-0.332453-0.142137179
Passing Through27200nan-0.12099176
Turn On The Lights again.. [Ft...28199-0.0333126-0.12099175
Jungle29193-0.0229165-0.12099170
Leaving For London30191-0.164406-0.12099168
Walkin31182nan-0.12099160

Doing this produces a new, reordered prediction which hopefully has some of the inherent collection bias factored out. It's important to note that while this model can make predictions about vote count error, it is not perfect and the predictions should be taken with a grain of salt. The model is only as good as the data it was trained on, and factors such as changing public taste cannot be accounted for.

As of 24/01/2023, 12PM AEDT, the default view of 100 Warm Tunas will display ranks in their ML applied order. Results which have changed ranks due to the adjustment will be marked with text ✨ ML Model Applied, along with the original rank.

Example of a result where ranks have changed due to adjustment

Example of a result where ranks have changed due to adjustment

The vote counts displayed on the prediction will continue to be the true number of votes collected.

You can opt out of ML applied ordering by using the controls overlay:

Uncheck the Enable ML Model option to opt out

Uncheck the Enable ML Model option to opt out

We hope you enjoy these improvements to 100 Warm Tunas. If you want to show your appreciation for the work that I do, you can help contribute to the project by buying me a coffee ☕️.

Your support is greatly appreciated and helps to keep 100 Warm Tunas running for years to come.