0Pricing
Pandas & NumPy Academy · Lezione

Analisi del funnel

Tenga traccia del numero di utenti che raggiunge ogni fase di un funnel articolato in più passaggi e calcoli i tassi di conversione tra fasi consecutive.

Analisi del funnel è una lezione Pandas & NumPy Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Pandas & NumPy Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Che cos'è un funnel di conversione?

Un funnel di conversione modella il percorso dell'utente attraverso una sequenza di passaggi obbligatori: ad esempio, Home page → Pagina del prodotto → Aggiunta al carrello → Checkout → Acquisto. A ogni passaggio, alcuni utenti abbandonano il percorso e non raggiungono quello successivo. L'analisi del funnel quantifica questi abbandoni, così i team possono stabilire quale passaggio migliorare per primo. Il risultato è una tabella che mostra il numero di utenti e il tasso di conversione per ogni passaggio.

import pandas as pd

FUNNEL_STEPS = [
    'homepage',
    'product_page',
    'add_to_cart',
    'checkout',
    'purchase'
]

df = pd.read_csv('clickstream.csv', parse_dates=['timestamp'])
print(df['event_type'].value_counts())

Conteggio degli utenti unici a ogni passaggio

Per ogni passaggio del funnel, conti il numero di utenti unici che hanno generato quell'evento almeno una volta. Usi df[df['event_type'] == step]['user_id'].nunique() all'interno di un ciclo e raccolga i risultati in un dizionario. La conversione in una Series semplifica i successivi calcoli percentuali con una sola divisione.

step_counts = {}
for step in FUNNEL_STEPS:
    users = df[df['event_type'] == step]['user_id'].nunique()
    step_counts[step] = users

funnel = pd.Series(step_counts, name='users')
print(funnel)

Calcolo dei tassi di conversione tra passaggi consecutivi

Il tasso di conversione tra passaggi consecutivi mostra quale frazione degli utenti che hanno completato il passaggio N ha completato anche il passaggio N+1. Lo calcoli con funnel.shift(1), che restituisce il conteggio del passaggio precedente, ed esegua la divisione: funnel / funnel.shift(1) * 100. Il primo passaggio non ha un passaggio precedente, quindi il relativo tasso è NaN oppure 100 %, a seconda di come definisce la base di riferimento.

funnel_df = funnel.to_frame()
funnel_df['prev_users'] = funnel_df['users'].shift(1)
funnel_df['step_conversion_%'] = (funnel_df['users'] / funnel_df['prev_users'] * 100).round(1)
print(funnel_df)

Calcolo del tasso di conversione complessivo

Il tasso di conversione complessivo misura quale frazione di tutti gli utenti entrati nel funnel al passaggio 1 ha completato infine l'ultimo passaggio. Divida il numero di utenti dell'ultimo passaggio per quello del primo. Un tasso di conversione complessivo dal caricamento della home page all'acquisto compreso tra il 2 e il 5 % è tipico dell'e-commerce; valori inferiori segnalano un abbandono critico in qualche punto del funnel.

overall_rate = funnel.iloc[-1] / funnel.iloc[0] * 100
print(f'Overall conversion rate: {overall_rate:.1f}%')

funnel_df['overall_conversion_%'] = (funnel_df['users'] / funnel_df['users'].iloc[0] * 100).round(1)
print(funnel_df[['users', 'overall_conversion_%']])

Funnel ordinato: imposizione della sequenza dei passaggi

Un semplice conteggio degli utenti unici considera validi anche gli utenti che sono passati direttamente al checkout senza visitare la pagina del prodotto, gonfiando la conversione nei primi passaggi. Per imporre l'ordine, verifichi che ogni utente abbia raggiunto il passaggio N solo dopo aver raggiunto il passaggio N-1. Ciò richiede il confronto dei timestamp: l'utente deve avere un evento product_page prima del relativo evento add_to_cart.

# Get first occurrence of each step per user
first_events = df.groupby(['user_id', 'event_type'])['timestamp'].min().unstack('event_type')

# Enforce ordering: each step must come after the previous
first_events['valid_to_cart'] = first_events['add_to_cart'] > first_events['product_page']
print(first_events[['product_page', 'add_to_cart', 'valid_to_cart']].head())

Funnel per segmento: tipo di dispositivo

Segmenti diversi di utenti possono avere tassi di conversione molto differenti. Esegua lo stesso calcolo del funnel separatamente per gli utenti desktop e mobile usando groupby('device_type'). Se gli utenti mobile abbandonano frequentemente al passaggio del checkout, è probabile che la pagina di checkout presenti problemi di usabilità sugli schermi piccoli. I funnel segmentati rivelano opportunità di ottimizzazione mirate.

def funnel_for_group(group_df):
    counts = {}
    for step in FUNNEL_STEPS:
        counts[step] = group_df[group_df['event_type'] == step]['user_id'].nunique()
    return pd.Series(counts)

segmented_funnel = df.groupby('device_type').apply(funnel_for_group)
print(segmented_funnel)

Identificazione del passaggio con il maggior abbandono

Il passaggio con la maggiore perdita assoluta di utenti è l'obiettivo prioritario per l'ottimizzazione. Lo individui calcolando la differenza tra i conteggi degli utenti di passaggi consecutivi con funnel.diff(): il valore più negativo corrisponde al maggior abbandono. Renda disponibile questa informazione sia in forma numerica sia visiva per gli stakeholder.

dropoffs = funnel.diff().abs()
biggest_drop = dropoffs.idxmax()
biggest_drop_count = dropoffs.max()

print(f'Biggest drop-off: {biggest_drop} ({biggest_drop_count:.0f} users lost)')

Tempo tra i passaggi del funnel

Il tempo impiegato dagli utenti per passare da un passaggio al successivo rivela la presenza di ostacoli. Se gli utenti attendono ore tra l'aggiunta al carrello e il checkout, un'email per il recupero dei carrelli abbandonati potrebbe riportarli al completamento. Calcoli il tempo mediano tra ogni coppia di passaggi usando il DataFrame first_events, sottraendo le colonne di timestamp adiacenti e calcolando la mediana su tutti gli utenti.

for i in range(1, len(FUNNEL_STEPS)):
    prev = FUNNEL_STEPS[i-1]
    curr = FUNNEL_STEPS[i]
    delta = (first_events[curr] - first_events[prev]).dt.total_seconds() / 60
    print(f'{prev} -> {curr}: median {delta.median():.1f} min, 90th pct {delta.quantile(0.9):.1f} min')

Andamento settimanale del funnel

Verifichi se i tassi di conversione migliorano o peggiorano di settimana in settimana calcolando il funnel separatamente per ogni settimana. Raggruppi la tabella del primo evento per settimana usando first_events['homepage'].dt.isocalendar().week e calcoli il tasso di conversione complessivo per ogni settimana. Un calo improvviso in una determinata settimana potrebbe coincidere con un rilascio del prodotto o una modifica alle attività di marketing.

df['week'] = df['timestamp'].dt.isocalendar().week

weekly_conv = []
for week, wdf in df.groupby('week'):
    top = wdf[wdf['event_type'] == FUNNEL_STEPS[0]]['user_id'].nunique()
    bot = wdf[wdf['event_type'] == FUNNEL_STEPS[-1]]['user_id'].nunique()
    weekly_conv.append({'week': week, 'conversion_%': bot/top*100 if top else 0})

print(pd.DataFrame(weekly_conv))

Creazione del DataFrame riepilogativo del funnel

Raccolga tutte le metriche del funnel in un DataFrame riepilogativo ordinato, che possa essere esportato in un report o utilizzato per una visualizzazione. Includa colonne per il nome del passaggio, il numero di utenti, la conversione tra passaggi consecutivi, la conversione complessiva e gli utenti persi. Questo unico DataFrame dovrebbe essere il risultato dell'analisi del funnel, leggibile sia dagli sviluppatori sia dai product manager.

summary = pd.DataFrame({
    'step': FUNNEL_STEPS,
    'users': [step_counts[s] for s in FUNNEL_STEPS]
})
summary['users_lost'] = summary['users'].shift(-1).rsub(summary['users'])
summary['step_conv_%'] = (summary['users'] / summary['users'].shift(1) * 100).round(1)
summary['overall_conv_%'] = (summary['users'] / summary['users'].iloc[0] * 100).round(1)
print(summary)

Visualizzazione del funnel come grafico a barre

Rappresenti il funnel come un grafico a barre orizzontali, in cui la lunghezza di ogni barra indica il numero di utenti a quel passaggio. La forma a imbuto emerge naturalmente quando le barre sono ordinate dall’alto (numero massimo di utenti) verso il basso (numero minimo). Annota ogni barra con la percentuale di conversione da un passaggio al successivo, così il grafico è autosufficiente e non richiede una tabella dati separata per essere interpretato.

import matplotlib.pyplot as plt

fig, ax = plt.subplots(figsize=(8, 5))
ax.barh(summary['step'][::-1], summary['users'][::-1], color='steelblue')
for i, row in summary[::-1].iterrows():
    ax.text(row['users'], i - summary.index[0], f'  {row['step_conv_%']}%', va='center')
ax.set_xlabel('Unique Users')
ax.set_title('Conversion Funnel')
plt.tight_layout()
plt.show()

Verifica rapida

Verifichi la Sua comprensione dei concetti di analisi dei dati presentati in questa lezione.

Riepilogo della lezione

In questa lezione ha imparato a: contare gli utenti unici a ogni passaggio del funnel, calcolare i tassi di conversione tra passaggi e complessivi e suddividere i funnel per tipo di dispositivo e monitorare l’andamento settimanale delle conversioni. Ora analizzeremo le tabelle di retention per coorte, per monitorare quanti utenti tornano settimana dopo settimana.

Domande Frequenti

La lezione «Analisi del funnel» è gratuita?

Sì — il testo completo di «Analisi del funnel» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Pandas & NumPy Academy, passa a CoddyKit PRO. Il corso Pandas & NumPy Academy include 4 lezioni in totale.

Cosa imparerò in «Analisi del funnel»?

Tenga traccia del numero di utenti che raggiunge ogni fase di un funnel articolato in più passaggi e calcoli i tassi di conversione tra fasi consecutive. Eserciti Pandas & NumPy Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Pandas & NumPy Academy?

Non è richiesta alcuna esperienza precedente. Pandas & NumPy Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.

Quanto tempo richiede la lezione «Analisi del funnel»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Pandas & NumPy Academy?

Sì. Ogni lezione Pandas & NumPy Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Sessionizzazione e sequenza degli eventi
  2. Analisi del funnel
  3. Tabella di retention per coorte
  4. Visualizzare i percorsi degli utenti
← Torna a Pandas & NumPy Academy