Introduzione: Cos’è il QPT?
Il Qualified Page Time (QPT) rappresenta una metrica avanzata per misurare il tempo qualitativo che gli utenti trascorrono interagendo con i contenuti di una piattaforma digitale. A differenza delle metriche tradizionali come il semplice tempo di permanenza, il QPT considera solo i momenti effettivamente spesi in attività significative, escludendo i tempi inattivi. Ciò consente di ottenere un’immagine più accurata del reale coinvolgimento dell’utente.
I dati utilizzati in questo studio sono simulati, ma rappresentano il tipo di report che potremmo ottenere attraverso un’implementazione personalizzata di strumenti come Google Analytics. Se desideri approfondire il calcolo del QPT e la sua implementazione, puoi consultare questo articolo dedicato.
Obiettivo del Codice
L’obiettivo principale di questo codice è simulare e analizzare il comportamento degli utenti attraverso la metrica “QPT” (Quality Per Time), ovvero una misura del tempo qualitativo speso su una piattaforma. Utilizzando una distribuzione binomiale negativa, il codice:
- Genera dati simulati rappresentativi di tre segmenti di utenti (casual, engaged e power users) con comportamenti distinti.
- Calcola i parametri statistici che descrivono la distribuzione del tempo speso (QPT) per modellare il comportamento reale.
- Visualizza i dati con grafici avanzati per esplorare le tendenze e le relazioni tra variabili correlate.
- Fornisce statistiche descrittive dettagliate per ogni segmento di utenti.
L’output finale è un insieme di grafici, tabelle e parametri statistici che possono essere utilizzati per prendere decisioni strategiche basate sui dati.
Parametri Utilizzati per la Simulazione
Per generare i dati simulati, sono stati definiti tre segmenti di utenti: casual users, engaged users e power users. Ogni segmento è stato modellato utilizzando una distribuzione binomiale negativa, sfruttando la sua capacità di catturare la sovradispersione dei dati e di rappresentare eventi rari, come nel caso dei power users.
- Casual Users:
- Numero di successi (n): 2
Valore basso, che indica interazioni brevi e discontinue. - Probabilità di successo (p): 0.7
Alta probabilità che un’interazione termini rapidamente. - Descrizione: Questo segmento rappresenta utenti che trascorrono poco tempo sulla piattaforma, spesso visitando una sola pagina o abbandonando rapidamente.
- Numero di successi (n): 2
- Engaged Users:
- Numero di successi (n): 5
Valore medio, che riflette un coinvolgimento moderato. - Probabilità di successo (p): 0.5
Probabilità media di completare un’interazione, rappresentando utenti che navigano più pagine e spendono tempo a leggere. - Descrizione: Gli utenti engaged sono quelli che si immergono nei contenuti, ma senza raggiungere livelli estremi di utilizzo.
- Numero di successi (n): 5
- Power Users:
- Numero di successi (n): 10
Valore elevato, che rappresenta sessioni lunghe e continuative. - Probabilità di successo (p): 0.3
Bassa probabilità di terminare, riflettendo sessioni estese e un profondo coinvolgimento. - Descrizione: Questi utenti rappresentano la fascia più attiva, spesso responsabile di una porzione significativa del tempo complessivo trascorso sulla piattaforma.
- Numero di successi (n): 10
Variabili Aggiuntive
Per simulare un comportamento più realistico, sono state generate altre due variabili correlate al QPT:
- Profondità di Scroll (Scroll Depth):
- È stata modellata come proporzionale al QPT, con l’aggiunta di una variabilità casuale per riflettere le differenze individuali nei comportamenti di lettura.
- Esempio: un power user potrebbe avere una profondità di scroll media maggiore rispetto a un casual user.
- Numero di Interazioni (Interaction Count):
- Generato utilizzando una distribuzione di Poisson, il cui tasso (λ) è proporzionale al QPT.
- Rappresenta eventi come clic su link, video o pulsanti.
Rappresentazione dei Segmenti nei Dati
Ogni segmento è stato simulato con un numero proporzionale di utenti per riflettere una distribuzione tipica del traffico web. Ad esempio:
- Casual users: 60% della popolazione.
- Engaged users: 30% della popolazione.
- Power users: 10% della popolazione.
Output Principali
- Grafici:
- Distribuzione del QPT per tutti gli utenti con un fit basato sulla distribuzione binomiale negativa.
- Distribuzione del QPT per segmento di utenti (casual, engaged, power users).
- Relazione tra QPT e profondità di scroll (scroll depth).
- Serie temporale del QPT medio per segmento.
- Statistiche Descrittive:
- Numero di osservazioni, media, deviazione standard e mediana del QPT per segmento.
- Media della profondità di scroll e del numero di interazioni per segmento.
- Parametri del Modello Binomiale Negativo:
- Parametri stimati (n, p) e loro interpretazione (media e varianza teorica).
Il codice in Python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.stats import nbinom
import datetime
# Configurazione avanzata dello stile dei grafici
def setup_plot_style():
plt.rcParams.update({
'figure.facecolor': 'white',
'axes.grid': True,
'grid.alpha': 0.3,
'axes.labelsize': 11,
'axes.titlesize': 14,
'xtick.labelsize': 10,
'ytick.labelsize': 10,
'lines.linewidth': 1.5,
'grid.linestyle': '--',
'grid.color': '#cccccc',
'axes.prop_cycle': plt.cycler(color=[
'#1f77b4', '#ff7f0e', '#2ca02c', '#d62728',
'#9467bd', '#8c564b', '#e377c2', '#7f7f7f'
])
})
# Impostiamo un seed per la riproducibilità
np.random.seed(42)
# Generazione dei dati simulati
def generate_qpt_data(n_sessions=1000):
casual_users = np.random.negative_binomial(3, 0.3, int(n_sessions * 0.6)) * 10
engaged_users = np.random.negative_binomial(5, 0.2, int(n_sessions * 0.3)) * 15
power_users = np.random.negative_binomial(8, 0.15, int(n_sessions * 0.1)) * 20
qpt_values = np.concatenate([casual_users, engaged_users, power_users])
noise = np.random.normal(0, 5, len(qpt_values))
qpt_values = np.maximum(qpt_values + noise, 0)
dates = pd.date_range(datetime.datetime.now() - datetime.timedelta(days=30),
datetime.datetime.now(), periods=len(qpt_values))
user_types = ['casual'] * len(casual_users) + ['engaged'] * len(engaged_users) + ['power'] * len(power_users)
return pd.DataFrame({
'data': dates,
'qpt_secondi': qpt_values,
'tipo_utente': user_types,
'scroll_depth': [min(100, np.random.normal(x / 10, 10)) for x in qpt_values],
'interaction_count': [np.random.poisson(x / 30) for x in qpt_values]
})
# Calcolo dei parametri della binomiale negativa
def fit_negative_binomial(data):
mean = np.mean(data)
variance = np.var(data)
if variance > mean:
p = mean / variance
n = mean * p / (1 - p)
return n, p
else:
raise ValueError("La varianza deve essere maggiore della media per una distribuzione binomiale negativa.")
# Visualizzazione e analisi dei dati
def plot_analysis(df):
setup_plot_style()
n_est, p_est = fit_negative_binomial(df['qpt_secondi'])
x = np.arange(0, int(df['qpt_secondi'].max()))
theoretical_pmf = nbinom.pmf(x, n_est, p_est)
fig, axs = plt.subplots(2, 2, figsize=(15, 10))
# Distribuzione QPT
sns.histplot(df['qpt_secondi'], bins=30, stat='density', ax=axs[0, 0], alpha=0.6)
axs[0, 0].plot(x, theoretical_pmf, 'r-', lw=2, label='Fit Binomiale Negativa')
axs[0, 0].set_title('Distribuzione QPT con Modello')
axs[0, 0].set_xlabel('QPT (secondi)')
axs[0, 0].set_ylabel('Densità')
axs[0, 0].legend()
# QPT per tipo di utente
sns.boxplot(data=df, x='tipo_utente', y='qpt_secondi', ax=axs[0, 1])
axs[0, 1].set_title('Distribuzione QPT per Segmento')
axs[0, 1].set_xlabel('Tipo di Utente')
axs[0, 1].set_ylabel('QPT (secondi)')
# Correlazione QPT vs Scroll Depth
sns.scatterplot(data=df, x='qpt_secondi', y='scroll_depth', hue='tipo_utente', ax=axs[1, 0], alpha=0.6)
axs[1, 0].set_title('Relazione QPT vs Profondità di Scroll')
axs[1, 0].set_xlabel('QPT (secondi)')
axs[1, 0].set_ylabel('Profondità di Scroll (%)')
# Serie temporale QPT medio giornaliero
daily_qpt = df.groupby(['data', 'tipo_utente'])['qpt_secondi'].mean().unstack()
daily_qpt.plot(ax=axs[1, 1])
axs[1, 1].set_title('Trend QPT per Segmento')
axs[1, 1].set_xlabel('Data')
axs[1, 1].set_ylabel('QPT Medio (secondi)')
plt.tight_layout()
plt.show()
# Statistiche
stats_by_segment = df.groupby('tipo_utente').agg({
'qpt_secondi': ['count', 'mean', 'std', 'median'],
'scroll_depth': 'mean',
'interaction_count': 'mean'
}).round(2)
print("\nStatistiche per Segmento di Utenti:")
print(stats_by_segment)
mean_theoretical = n_est * (1 - p_est) / p_est
variance_theoretical = n_est * (1 - p_est) / (p_est ** 2)
print(f"\nParametri del Modello Binomiale Negativo:")
print(f"n (numero di successi): {n_est:.2f}")
print(f"p (probabilità di successo): {p_est:.2f}")
print(f"Media teorica: {mean_theoretical:.2f}")
print(f"Varianza teorica: {variance_theoretical:.2f}")
# Esecuzione
df_qpt = generate_qpt_data()
plot_analysis(df_qpt)


Discussione dei Risultati
Analisi dei Segmenti di Utenti
L’analisi dei dati simulati ha evidenziato differenze significative tra i tre segmenti di utenti: casual, engaged e power users. Queste differenze non solo offrono una comprensione dettagliata dei comportamenti di navigazione, ma forniscono anche insight utili per sviluppare strategie mirate.
- Casual Users:
- Caratteristiche principali: Tempi di permanenza brevi, bassa profondità di scroll e numero limitato di interazioni.
- Implicazioni strategiche:
- Contenuti più concisi e accattivanti possono essere più efficaci per catturare l’attenzione di questo segmento.
- L’ottimizzazione delle prime impressioni, come titoli o immagini d’impatto, può aumentare il loro tempo di permanenza.
- Engaged Users:
- Caratteristiche principali: Tempi di permanenza moderati, profondità di scroll significativa e un buon numero di interazioni.
- Implicazioni strategiche:
- Questo segmento rappresenta un target ideale per contenuti più approfonditi e interattivi, come articoli di lunga durata, video o quiz.
- Strategie per favorire la fidelizzazione, come l’invio di newsletter personalizzate o l’invito a iscriversi a un account, potrebbero rivelarsi particolarmente efficaci.
- Power Users:
- Caratteristiche principali: Tempi di permanenza molto lunghi, alta profondità di scroll e frequenza elevata di interazioni.
- Implicazioni strategiche:
- Questo gruppo è spesso costituito da utenti più affezionati o clienti abituali. Creare contenuti premium o programmi di fidelizzazione esclusivi potrebbe rafforzare ulteriormente il loro coinvolgimento.
- È importante monitorare costantemente il comportamento di questo segmento, in quanto rappresenta una fetta significativa del valore generato dalla piattaforma.
Insight Generali sui Risultati
- Distribuzione del QPT:
- La distribuzione binomiale negativa ha dimostrato di essere un modello appropriato per rappresentare la variabilità osservata nei dati. La varianza più elevata rispetto alla media è un indicatore della presenza di una minoranza di utenti estremamente attivi (power users) che influenzano fortemente le metriche aggregate.
- Questo suggerisce che il calcolo di metriche medie (ad esempio, il tempo medio di permanenza) senza considerare i segmenti potrebbe portare a interpretazioni distorte.
- Correlazioni tra QPT e Variabili Correlate:
- La correlazione positiva tra QPT e profondità di scroll implica che un maggiore coinvolgimento temporale si traduce spesso in una navigazione più approfondita. Ciò conferma che il QPT può essere utilizzato come proxy per misurare l’effettivo interesse dell’utente verso i contenuti.
- Il legame tra QPT e numero di interazioni evidenzia che un tempo maggiore sul sito è associato a un comportamento più attivo, offrendo opportunità per stimolare azioni specifiche (ad esempio, iscrizioni o acquisti).
Implicazioni per l’Ottimizzazione dei Contenuti
I risultati dell’analisi possono guidare diverse strategie di ottimizzazione:
- Personalizzazione dei Contenuti:
- Adattare i contenuti alle esigenze di ciascun segmento può migliorare l’esperienza utente complessiva e aumentare i tassi di conversione. Ad esempio, offrire percorsi rapidi per i casual users e approfondimenti dettagliati per i power users.
- Segmentazione Dinamica:
- Implementare sistemi di personalizzazione in tempo reale per riconoscere e rispondere ai comportamenti degli utenti. Ad esempio, suggerire contenuti basati sulla profondità di scroll o sulle interazioni registrate.
- Allocazione delle Risorse:
- Investire maggiormente in strategie che mirano agli engaged e power users, che hanno un potenziale maggiore di generare valore a lungo termine, senza trascurare iniziative per convertire i casual users in segmenti più coinvolti.
- Monitoraggio e Iterazione:
- I risultati ottenuti da questa analisi possono essere utilizzati come benchmark per monitorare l’efficacia delle strategie di ottimizzazione nel tempo. Un’analisi periodica dei segmenti e delle metriche correlate garantisce una continua evoluzione delle strategie.
Conclusione
La segmentazione degli utenti e l’utilizzo del QPT come metrica di engagement offrono un potente strumento per comprendere il comportamento degli utenti e ottimizzare i contenuti digitali. Le differenze osservate tra i segmenti non solo aiutano a personalizzare l’esperienza utente, ma offrono anche indicazioni pratiche su dove concentrare gli sforzi di marketing e sviluppo dei contenuti.
Articoli di approfondimento
- 🔵 Distribuzioni discrete
- 🔵 Distribuzione binomiale o di Bernoulli
- 🔵 Distribuzione binomiale: 6 esercizi svolti (dal facile all’avanzato)
- 🔵 La distribuzione binomiale negativa
- 🔵 La distribuzione binomiale negativa: un’analisi approfondita con esempi
- 🔵 Distribuzione di Pascal (binomiale negativa): teoria, formula ed esercizi risolti
- 🔵 Distribuzione binomiale negativa: 6 esercizi dal dating al marketing
- 🔵 Distribuzione binomiale negativa: 6 esercizi svolti e spiegati – guida pratica





