FestivalStats

Metodologia

FestivalStats pubblica classifiche non ufficiali che servono a leggere la domanda “reale” (trazione) e, nello storico, a confrontare piazzamento al Festival e successo post-festival. Le classifiche sono modelli riproducibili basati su proxy pubblici/industriali e su regole dichiarate (normalizzazione, pesi, controlli di robustezza).

0) Tre metodi, tre contesti

1) Origine dati e aggiornamenti

FestivalStats usa come unica sorgente operativa un Google Sheet pubblico. Durante ogni build/deploy, il sito scarica il CSV del foglio, normalizza i campi richiesti e genera pagine HTML statiche.

La frequenza degli aggiornamenti dipende dal deploy: quando viene eseguito un nuovo deploy (manuale o automatico), i dati vengono ricaricati. Se il CSV non è raggiungibile, il sito può usare un dataset locale di fallback per mantenere online la pagina.

2) Durante Sanremo (v1 / v1.1): classifica di “trazione”

Durante il Festival, l’obiettivo è misurare una trazione “live” combinando radio, posizionamenti di piattaforme e YouTube. In questa fase, i rank in playlist/classifiche inseriti nel foglio sono considerati utilizzabili come proxy operativi.

2.1 Variabili utilizzate (input)

2.2 Normalizzazione (tutto su scala 0–100)

Le variabili hanno scale diverse (rank, streams, views, score radio). Per renderle confrontabili, le trasformiamo in punteggi 0–100. Uno 0 è valido: indica il valore più basso del campione corrente per quella metrica.

Nota tecnica: se per una metrica max(x) = min(x) (nessuna variabilità nel campione), la metrica non discrimina. In quel caso assegniamo 50 a tutte le righe per quella metrica.

2.2.1 Rank → score 0–100 (Spotify / Amazon / Apple)

Con N = numero di righe/partecipanti nel CSV:

ScoreRank(rank) = 100 * (N - rank) / (N - 1)

2.2.2 Spotify streams 24h → score 0–100 (log + min-max)

Slog = ln(1 + Spotify_Streams24h)

ScoreMinMax(x) = 100 * (x - min(x)) / (max(x) - min(x))
(se max(x) = min(x), ScoreMinMax = 50 per tutte le righe)

ScoreStreams24h = ScoreMinMax(Slog)

2.2.3 Spotify (rank + streams 24h) con parametro β

ScoreSpotify = β * ScoreRank(Spotify_rank) + (1 - β) * ScoreStreams24h

Impostiamo β = 0.40 come “ancoraggio” al rank: Spotify resta principalmente volume-driven (streams 24h), ma evita che oscillazioni giornaliere o code estreme dominino interamente il contributo Spotify.

Sensitivity check (trasparenza): rieseguiamo il calcolo con β ∈ {0.30, 0.40, 0.50} per verificare che i pattern principali non dipendano in modo opportunistico dal valore scelto.

2.2.4 YouTube views → score 0–100 (log + min-max)

YTlog  = ln(1 + YT_views)
YT1log = ln(1 + YT_1_views)

ScoreMinMax(x) = 100 * (x - min(x)) / (max(x) - min(x))
(se max(x) = min(x), ScoreMinMax = 50 per tutte le righe)

ScoreYT = 0.5 * ScoreMinMax(YTlog) + 0.5 * ScoreMinMax(YT1log)

2.2.5 EarOne → score 0–100 (min-max)

ScoreRadio = ScoreMinMax(EarOne_score)

2.3 Ponderazione (pesi) e razionale

2.3.1 Macro: radio vs musica in streaming (proxy “tempo medio”)

Per ancorare il modello a un ordine di grandezza realistico, usiamo un proxy basato sui minuti medi giornalieri (Italia, 16–64, 2024): 66 minuti radio e 68 minuti musica in streaming (Fig. 1.1, fonte We Are Social, riportata nel Rapporto ORES 2025). (Rapporto ORES 2025 (PDF))

w_radio_macro   = 66 / (66 + 68) = 0.4925
w_stream_macro  = 68 / (66 + 68) = 0.5075

2.3.2 Micro: ripartizione dello streaming tra piattaforme (proxy “acquisto/adozione”)

Dati pubblici “minuti per piattaforma” (Italia, Spotify vs Apple vs Amazon) non sono sempre accessibili in modo aperto e comparabile. Per ripartire la quota streaming tra piattaforme, usiamo un proxy di forza/adozione basato su una survey Statista Consumer Insights (multi-pick): “da quali provider hai comprato download musicali o servizi streaming negli ultimi 12 mesi?” (survey 2022; as of Nov 2023). (Digital Advertising 2023 – Statista (PDF))

Valori (Italia) usati come proxy (multi-pick → sommano oltre 100%): Amazon Music 57%, Spotify 56%, YouTube Music 32%, Apple Music 21%.

2.3.3 Pesi finali (v1)

w_radio   = 0.4925373

w_spotify = 0.5074627 * (56/166) = 0.1711922
w_amazon  = 0.5074627 * (57/166) = 0.1742492
w_youtube = 0.5074627 * (32/166) = 0.0978241
w_apple   = 0.5074627 * (21/166) = 0.0641971

Versione pesi: v1 (2026-02-25). Versione Spotify-score: v1.1 (2026-02-27) (streams 24h + parametro β). Se cambiano fonti/proxy o perimetro dati nel foglio, i pesi vanno aggiornati qui e nel calcolo.

2.4 Formula del punteggio finale (durante Sanremo)

ScoreFinal =
  0.4925 * ScoreRadio +
  0.1712 * ScoreSpotify +
  0.1742 * ScoreAmazon +
  0.0642 * ScoreApple +
  0.0978 * ScoreYT

La classifica è l’ordinamento decrescente di ScoreFinal.

2.5 Limitazioni (durante Sanremo)

3) Post-Sanremo (v2): trazione “indipendente” (streaming/radio/discovery)

Nella fase post-festival non usiamo più i rank delle playlist “Sanremo” sulle piattaforme, perché possono diventare un duplicato (o un riflesso) della classifica ufficiale. Usiamo invece segnali più “autonomi”: Spotify (streams), Apple/Amazon (Viral), Shazam Top 200, EarOne e YouTube.

3.1 Variabili utilizzate (input)

3.2 OK / NR / ND (Top-K e “assenze”)

In post-festival alcune fonti sono per definizione Top-K (Apple/Amazon Top 50; Shazam Top 200). Quindi “non comparire” è informazione.

3.3 Normalizzazione (tutto su scala 0–100)

3.3.1 Rank Top-K → score 0–100 (Apple Viral / Amazon Viral / Shazam)

Con K = profondità della chart (Apple=50, Amazon=50, Shazam=200):

ScoreRankK(rank; K) = 100 * (K + 1 - rank) / K

Se NR → ScoreRankK = 0
Se ND → ScoreRankK = NA (escluso dal denominatore)

3.3.2 Spotify streams → score 0–100 (log + min-max)

Slog = ln(1 + Spotify_Streams24h)

ScoreMinMax(x) = 100 * (x - min(x)) / (max(x) - min(x))
(se max(x) = min(x), ScoreMinMax = 50 per tutte le righe)

ScoreSpotify = ScoreMinMax(Slog)

3.3.3 EarOne → score 0–100 (min-max)

ScoreRadio = ScoreMinMax(EarOne_score)

3.3.4 YouTube (RAI + Vevo) → score 0–100 (log + min-max, poi media)

RAIlog  = ln(1 + RAI_Views)
VEVOlog = ln(1 + Vevo_Views)

ScoreYT = 0.5 * ScoreMinMax(RAIlog) + 0.5 * ScoreMinMax(VEVOlog)

3.4 Pesi e razionale (v2)

I pesi in un indicatore composito sono una scelta esplicita di modellazione (trade-off tra segnali) e vanno dichiarati e verificati con analisi di sensibilità. Per questo ci appoggiamo alle linee guida su composite indicators e robustezza dei ranking. (OECD/JRC – Handbook (PDF))

In post-festival, i segnali “core” (Spotify streams, radio, YouTube) hanno peso maggiore; i segnali “sparse” (Viral e Shazam Top-K) sono trattati come discovery/momentum e pesano meno per evitare che la semplice “assenza dalla Top-K” domini il ranking.

Sensitivity check (trasparenza): rieseguiamo il calcolo variando ciascun peso entro ±0.05 (con rinormalizzazione) e controlliamo stabilità di top-5/top-10 e correlazioni di ranking.

3.4.1 Pesi finali (v2)

w_spotify_streams = 0.40
w_radio_earone    = 0.30
w_youtube         = 0.15
w_shazam_top200   = 0.10
w_viral_apple     = 0.025
w_viral_amazon    = 0.025

3.5 Formula del punteggio finale (post-Sanremo)

Gestiamo i casi ND escludendo la metrica dal denominatore per quel brano (e quel deploy). I casi NR restano con score = 0.

ScoreFinal(i) =
  ( Σ w_m * Score_m(i)  per m con Score_m(i) != NA )
  -------------------------------------------------
  ( Σ w_m              per m con Score_m(i) != NA )

La classifica è l’ordinamento decrescente di ScoreFinal.

3.6 Limitazioni (post-Sanremo)

4) Archivio (1951–2025): “successo post-festival” (proxy) + regola fine anno

Oltre alle classifiche “live” e “post-festival”, FestivalStats mantiene un Archivio storico (anni 1951–2025) che confronta: rank ufficiale e successo post-festival basato su una proxy riproducibile.

Regola operativa: a fine anno l’edizione corrente viene inserita nell’Archivio e trattata con lo stesso metodo; per gli anni più recenti l’orizzonte y..y+3 può essere parziale (troncato) finché non vengono pubblicate le classifiche annuali degli anni successivi.

4.1 Dati utilizzati

Nota su HitParadeItalia: le “Top Annuali” sono ricostruzioni basate su fonti storiche e su criteri proprietari e possono differire da altre classifiche di fine anno.

4.2 Normalizzazione testo (pulizia per il matching)

normalize(text) =
  lowercase
  remove_diacritics
  remove_tokens(feat|featuring|ft|con|&|and)
  remove_punctuation
  collapse_spaces

4.3 Regole di matching brano↔classifica (per anno)

Matching anno per anno: (i) match primario su titolo normalizzato identico; (ii) in caso di più candidati con stesso titolo, disambiguazione tramite overlap token dell’artista.

4.4 Punteggio annuale (0–1) dal rank in classifica

Con:
  rank = posizione del brano (1 = migliore)
  N    = numero massimo di posizioni presenti nella classifica annuale (max rank)

AnnualPoints = 1 - (rank - 1) / (N - 1)
Clamp tra 0 e 1

4.5 Orizzonte temporale e decadimento (anni y..y+3)

MAX_HORIZON = 3   (t = 0..3)
WEIGHTS = [1.00, 0.60, 0.35, 0.20]

RawSuccess   = Σ_{t=0..3}  WEIGHTS[t] * AnnualPoints(year = y + t)
SuccessScore = 100 * RawSuccess / Σ(WEIGHTS)

Nota: per gli anni più recenti, l’orizzonte è troncato perché non si può guardare oltre l’ultimo anno per cui la classifica annuale è disponibile. In quel caso l’indicatore resta “conservativo” finché non diventano disponibili gli anni successivi.

4.6 Stati del punteggio: OK / NR / ND

Fonti

Fonti — Durante Sanremo (v1 / v1.1)

  1. Rapporto ORES 2025 (I-Com): minuti medi giornalieri Italia 16–64 (2024), incl. 66 minuti radio e 68 minuti musica in streaming. PDF
  2. Statista Consumer Insights (as of Nov 2023), survey 2022 (multi-pick): proxy adozione/acquisto brand (Italia: Amazon 57, Spotify 56, YouTube Music 32, Apple Music 21). PDF
  3. EarOne: metodologia del punteggio airplay basato su AQH (Average Quarter Hour). Methodology
  4. OECD/JRC: Handbook on Constructing Composite Indicators (pesi come scelta esplicita; robustezza e sensitivity analysis). PDF
  5. European Commission (Knowledge4Policy), Composite Indicators Toolkit – Step 6: Weighting. Pagina

Fonti — Post-Sanremo (v2)

  1. Apple Music — Viral Chart (Top 50). Playlist
  2. Amazon Music — Viral Hits (Top 50). Playlist
  3. Shazam — Top 200 Italia. Chart
  4. YouTube Data API v3 — Videos (statistics.viewCount). Docs
  5. EarOne — metodologia AQH (airplay audience-weighted). Methodology
  6. OECD/JRC — Composite Indicators Handbook (pesi e sensitivity analysis). PDF

Fonti — Archivio (1951–2025)

  1. HitParadeItalia – Top Annuali Single. Pagina
  2. HitParadeItalia – Metodologia. Pagina
  3. OECD/JRC — Composite Indicators Handbook (scelte di pesatura/robustezza). PDF