Rilevamento delle leggi di potenza nei dati del mondo reale con Python |  di Shawhin Talebi |  Novembre 2023

 | Intelligenza-Artificiale

Nel articolo precedenteci siamo concentrati su due tipi di distribuzioni: la distribuzione gaussiana e la distribuzione della legge di potenza. Abbiamo visto che queste distribuzioni avevano proprietà statistiche diametralmente opposte. Vale a dire, Le leggi di potenza sono guidate da eventi rari, mentre le gaussiane no.

Esempio rispettivamente di distribuzioni gaussiana e legge di potenza. Immagine dell’autore

Questa proprietà guidata da eventi rari è cresciuta 3 problemi con molti dei nostri strumenti statistici preferiti (ad esempio media, deviazione standard, regressione, ecc.) nell’analisi delle leggi di potenza. La conclusione è che se i dati sono di tipo gaussiano, è possibile utilizzare approcci comuni come la regressione e il calcolo dei valori attesi senza preoccupazioni. Tuttavia, se i dati sono di più Come una legge di potenza, queste tecniche possono dare risultati errati e fuorvianti.

Abbiamo anche visto una terza distribuzione (più maliziosa) che potrebbe assomigliare sia a una gaussiana che a una legge di potenza (nonostante le loro proprietà opposte) chiamata a Log Distribuzione normale.

La (maliziosa) distribuzione Log Normal appare sia in stile Guassiano che in stile Legge di Potenza. Immagine dell’autore.

Questa ambiguità presenta sfide per i professionisti nel decidere il migliore modo di analizzare un dato set di dati. Per superare queste sfide, può essere vantaggioso determinare se i dati si adattano a una legge di potenza, log normale o qualche altro tipo di distribuzione.

Un modo popolare per adattare una legge di potenza ai dati del mondo reale è quello che chiamerò “approccio Log-Log” (1). L’idea nasce da prendendo il logaritmo della funzione di densità di probabilità della legge di potenza (PDF)come derivato di seguito.

Prendendo il logaritmo della funzione di distribuzione di probabilità della legge di potenza (2). Immagine dell’autore.

La derivazione di cui sopra traduce la definizione PDF della legge di potenza in un’equazione lineare, come mostrato nella figura seguente.

Evidenzia la forma lineare del registro (PDF). Immagine dell’autore.

Ciò implica che il l’istogramma dei dati che segue una legge di potenza seguirà una linea retta. In pratica, ciò che accade è generare un istogramma per alcuni dati e tracciarlo su un grafico log-log (1). Si potrebbe andare anche oltre ed eseguire una regressione lineare per stimare il valore α della distribuzione (qui α = -m+1).

Tuttavia, ci sono limitazioni significative a questo approccio. Questi sono descritti nel riferimento (1) e riepilogati di seguito.

  • Le stime della pendenza (quindi α) sono soggette a errori sistematici
  • Gli errori di regressione possono essere difficili da stimare
  • L’adattamento può avere un bell’aspetto anche se la distribuzione non segue una legge di potere
  • Gli adattamenti potrebbero non obbedire alle condizioni di base per le distribuzioni di probabilità, ad esempio la normalizzazione

Sebbene l’approccio Log-Log sia semplice da implementare, i suoi limiti lo rendono tutt’altro che ottimale. Possiamo invece ricorrere a un approccio matematicamente più valido tramite Massima probabilitàuna statistica ampiamente utilizzata metodo per dedurre il migliore parametri per un modello dati alcuni dati.

La massima verosimiglianza è composta da 2 passaggi chiave. Passo 1: ottenere una funzione di verosimiglianza. Passo 2: massimizza la verosimiglianza rispetto ai parametri del tuo modello.

Passaggio 1: scrivere la funzione di verosimiglianza

Probabilità è un tipo speciale di probabilità. In parole povere, esso quantifica la probabilità dei nostri dati dato un particolare modello. Possiamo esprimerlo come la probabilità congiunta su tutti i nostri dati osservati (3). Nel caso di una distribuzione di Pareto, possiamo scriverla come segue.

Funzione di verosimiglianza per la distribuzione di Pareto (cioè un tipo speciale di legge di potenza) (4). Nota: quando si lavora con le funzioni di verosimiglianza, le osservazioni (cioè x_i) sono fisse mentre i parametri del modello sono ciò che varia. Immagine dell’autore.

Per rendere la massimizzazione della verosimiglianza un po’ più semplice, è consuetudine lavorare con la log-verosimiglianza (sono massimizzati dallo stesso valore di α).

Derivazione della verosimiglianza (4). Immagine dell’autore.

Passaggio 2: massimizzare la probabilità

Con una funzione di verosimiglianza (log) in mano, possiamo ora inquadrare il compito di determinare la migliore scelta dei parametri come un problema di ottimizzazione. Per trovare il valore α ottimale in base ai nostri dati, è necessario impostare la derivata di la) rispetto ad α uguale a zero e quindi risolvendo per α. Una derivazione di ciò è fornita di seguito.

Derivazione dello stimatore di massima verosimiglianza per α (4). Immagine dell’autore.

Questo ci fornisce il cosiddetto Stimatore della massima verosimiglianza per α. Con questo, possiamo inserire i valori osservati di x per stimare il valore α di una distribuzione di Pareto.

Con le basi teoriche impostate, vediamo come appare quando applicato ai dati del mondo reale (dai miei account sui social media).

Un ambito in cui prevalgono i dati a coda grassa sono i social media. Ad esempio, una piccola percentuale di creatori riceve la maggior parte dell’attenzione, una minoranza di blog medi ottiene la maggior parte delle letture e così via.

Qui useremo il powerlaw Libreria Python per determinare se i dati dei miei vari canali di social media (ad esempio Medium, YouTube, LinkedIn) veramente seguire una distribuzione basata sulla legge di potenza. I dati e il codice per questi esempi sono disponibili su Repositorio GitHub.

Dati artificiali

Prima di applicare l’approccio basato sulla massima verosimiglianza ai dati disordinati del mondo reale, vediamo cosa succede quando applichiamo questa tecnica ai dati artificiali (veramente) generati rispettivamente dalle distribuzioni Pareto e Log Normal. Ciò contribuirà a radicare le nostre aspettative prima di utilizzare l’approccio sui dati di cui non conosciamo la “vera” classe di distribuzione sottostante.

Per prima cosa importiamo alcune librerie utili.

import numpy as np
import matplotlib.pyplot as plt
import powerlaw
import pandas as pd

np.random.seed(0)

Successivamente, generiamo dati dalle distribuzioni Pareto e Log Normal.

# power law data
a = 2
x_min = 1
n = 1_000
x = np.linspace(0, n, n+1)
s_pareto = (np.random.pareto(a, len(x)) + 1) * x_min

# log normal data
m = 10
s = 1
s_lognormal = np.random.lognormal(m, s, len(x)) * s * np.sqrt(2*np.pi)

Per avere un’idea di come appaiono questi dati, è utile tracciare gli istogrammi. Qui traccio un istogramma dei valori grezzi di ciascun campione e il registro dei valori grezzi. Quest’ultima distribuzione semplifica la distinzione visiva tra i dati Power Law e Log Normal.

Istogrammi dei dati dalla distribuzione della legge di potenza. Immagine dell’autore.
Istogrammi di dati dalla distribuzione Log Normal. Immagine dell’autore.

Come possiamo vedere dagli istogrammi sopra, le distribuzioni dei valori grezzi sembrano qualitativamente simili per entrambe le distribuzioni. Tuttavia possiamo vedere a netta differenza nelle distribuzioni dei log. Vale a dire, la distribuzione logaritmica della legge di potenza è altamente distorta e non centrata sulla media, mentre il logaritmo della distribuzione logaritmica normale ricorda una distribuzione gaussiana.

Ora possiamo usare il file powerlaw libreria per adattare una legge di potenza a ciascun campione e stimare i valori per α e x_min. Ecco come appare il nostro esempio di legge sulla potenza.

# fit power to power law data
results = powerlaw.Fit(s_pareto)

# printing results
print("alpha = " + str(results.power_law.alpha)) # note: powerlaw lib's alpha definition is different than standard i.e. a_powerlawlib = a_standard + 1
print("x_min = " + str(results.power_law.xmin))
print('p = ' + str(compute_power_law_p_val(results)))

# Calculating best minimal value for power law fit
# alpha = 2.9331912195958676
# x_min = 1.2703447024073973
# p = 0.999

L’adattamento fa un lavoro decente nello stimare i valori reali dei parametri (cioè a=3, x_min=1), come visto dai valori alfa e x_min stampati sopra. Il valore p sopra quantifica la qualità dell’adattamento. Una p più alta significa un adattamento migliore (maggiori informazioni su questo valore nella sezione 4.1 del rif (1)).

Possiamo fare una cosa simile per la distribuzione Log Normal.

# fit power to log normal data
results = powerlaw.Fit(s_lognormal)
print("alpha = " + str(results.power_law.alpha)) # note: powerlaw lib's alpha definition is different than standard i.e. a_powerlawlib = a_standard + 1
print("x_min = " + str(results.power_law.xmin))
print('p = ' + str(compute_power_law_p_val(results)))

# Calculating best minimal value for power law fit
# alpha = 2.5508694755027337
# x_min = 76574.4701482522
# p = 0.999

Possiamo vedere che il campione Log Normale si adatta bene anche alla distribuzione della Legge di Potenza (p=0,999). Si noti, tuttavia, che il valore x_min è molto più in coda. Sebbene ciò possa essere utile per alcuni casi d’uso, non ci dice molto sulla distribuzione che meglio si adatta a tutti i dati nel campione.

Per superare questo problema, possiamo impostare manualmente il valore x_min sul minimo del campione e ripetere l’adattamento.

# fixing xmin so that fit must include all data
results = powerlaw.Fit(s_lognormal, xmin=np.min(s_lognormal))
print("alpha = " + str(results.power_law.alpha))
print("x_min = " + str(results.power_law.xmin))

# alpha = 1.3087955873576855
# x_min = 2201.318351239509

Il metodo .Fit() genera automaticamente anche stime per una distribuzione Log Normal.

print("mu = " + str(results.lognormal.mu))
print("sigma = " + str(results.lognormal.sigma))

# mu = 10.933481999687547
# sigma = 0.9834599169175509

I valori stimati dei parametri Log Normal sono vicini ai valori effettivi (mu=10, sigma=1), quindi l’adattamento ha fatto ancora una volta un buon lavoro!

Tuttavia, correggendo x_min, abbiamo perso la nostra metrica di qualità p (per qualsiasi motivo, il metodo non genera valori quando viene fornito x_min). Quindi questo solleva la domanda: con quali parametri di distribuzione dovrei andare? La legge di potenza o la normalità logaritmica?

Per rispondere a questa domanda, possiamo confrontare l’adattamento della Power Law con altre distribuzioni candidate tramite Rapporti di verosimiglianza (R). Un R positivo implica che la legge di potenza è più adatta, mentre un R negativo implica che la distribuzione alternativa è migliore. Inoltre, ogni confronto ci fornisce un valore di significatività (p). Ciò è dimostrato nel blocco di codice seguente.

distribution_list = ('lognormal', 'exponential', 'truncated_power_law', \
'stretched_exponential', 'lognormal_positive')

for distribution in distribution_list:
R, p = results.distribution_compare('power_law', distribution)
print("power law vs " + distribution +
": R = " + str(np.round(R,3)) +
", p = " + str(np.round(p,3)))

# power law vs lognormal: R = -776.987, p = 0.0
# power law vs exponential: R = -737.24, p = 0.0
# power law vs truncated_power_law: R = -419.958, p = 0.0
# power law vs stretched_exponential: R = -737.289, p = 0.0
# power law vs lognormal_positive: R = -776.987, p = 0.0

Come mostrato sopra, ogni distribuzione alternativa è preferita rispetto alla Legge di potenza quando si includono tutti i dati nel campione Log normale. Inoltre, in base ai rapporti di verosimiglianza, gli adattamenti lognormale e lognormal_positivo funzionano meglio.

Dati del mondo reale

Ora che abbiamo applicato il file powerlaw libreria ai dati di cui conosciamo la verità fondamentale, proviamolo su dati per i quali la distribuzione sottostante è sconosciuta.

Seguiremo una procedura simile a quella sopra ma con dati provenienti dal mondo reale. Qui analizzeremo i seguenti dati. Follower mensili guadagnati sul mio medio profilo, guadagni in tutto il mio Youtube video e impressioni quotidiane sul mio LinkedIn post dell’anno passato.

Inizieremo tracciando gli istogrammi.

I follower medi hanno guadagnato istogrammi. Immagine dell’autore.
Istogrammi delle entrate video di YouTube. Immagine dell’autore.
Istogrammi delle impressioni giornaliere di LinkedIn. Immagine dell’autore.

Due cose mi saltano fuori da queste trame. Unotutti e tre assomigliano più agli istogrammi Log Normal che agli istogrammi Power Law che abbiamo visto prima. Duele distribuzioni di Medium e YouTube sono sparse, il che significa che potrebbero avere dati insufficienti per trarre conclusioni forti.

Successivamente, applicheremo l’adattamento della legge di potenza a tutte e tre le distribuzioni impostando x_min come valore più piccolo in ciascun campione. I risultati di questo sono stampati di seguito.

Stime dei parametri Power Law e Log Normal per dati empirici. Immagine dell’autore.

Per determinare quale sia la distribuzione migliore, possiamo ancora una volta fare confronti testa a testa tra la Legge di Potenza adattata ad alcune alternative. Questi risultati sono riportati di seguito.

Confronti idonei tra legge di potenza e distribuzioni alternative. Immagine dell’autore.

Utilizzando la regola pratica del cut-off di significatività di p<0,1 possiamo trarre le seguenti conclusioni. I follower medi e le impressioni di LinkedIn si adattano meglio a una distribuzione Log Normal, mentre una legge di potenza rappresenta meglio i guadagni di YouTube.

Naturalmente, poiché i dati sui follower medi e sugli orecchini YouTube qui sono limitati (N <100), dovremmo trarre qualsiasi conclusione da tali dati con le pinze.

Molti strumenti statistici standard falliscono quando applicati ai dati seguendo una distribuzione della legge di potenza. Di conseguenza, individuare le leggi di potenza nei dati empirici può aiutare i professionisti a evitare analisi errate e conclusioni fuorvianti.

Tuttavia, le leggi sul potere sono un caso estremo del fenomeno più generale di code grasse. Nel prossimo articolo di questa serie, porteremo questo lavoro un ulteriore passo avanti e quantificheremo la coda grassa per ogni dato set di dati tramite 4 pratiche euristiche.

Fonte: towardsdatascience.com

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *