Implementiamo un modello che vuole essere uno strumento per l’analisi del Churn Rate e del Customer Lifetime Value (CLV), combinando la flessibilità di Python con la familiarità e la potenza di Excel. L’obiettivo è fornire un’analisi approfondita e facilmente interpretabile dei dati relativi ai clienti, consentendo alle aziende di prendere decisioni strategiche informate.
Attraverso l’uso di Python, il modello automatizza la creazione di un foglio di calcolo Excel strutturato, che include:
- Dati di base: Un riepilogo chiaro e organizzato dei dati mensili sui clienti, inclusi i tassi di abbandono.
- Analisi avanzate: Calcoli automatici di metriche chiave come il Churn Rate medio, la media mobile e una stima del CLV, sfruttando le formule di Excel.
- Visualizzazioni grafiche: Grafici a linee che mostrano l’andamento del Churn Rate e della media mobile nel tempo, per una rapida comprensione dei trend.
L’integrazione di Python con Excel offre un flusso di lavoro efficiente: Python si occupa dell’elaborazione dei dati e della generazione del file Excel, mentre Excel fornisce un’interfaccia intuitiva per la visualizzazione e l’ulteriore analisi dei risultati.
Questo approccio ibrido consente di sfruttare i vantaggi di entrambi gli strumenti: la potenza di calcolo e l’automazione di Python, unite alla flessibilità e alla familiarità di Excel.
👉Churn Rate: Cos’è, Come Calcolarlo
👉 Addio, clienti! ❌ Perché il churn rate fa piangere (e come evitarlo)
Analisi Passo-Passo del Modello
-
Creazione del DataFrame Iniziale:
- Il codice inizia creando un DataFrame pandas che contiene dati mensili relativi ai clienti. Questi dati includono:
- “Mese”: I nomi dei mesi (Gennaio, Febbraio, ecc.).
- “Clienti Iniziali”: Il numero di clienti all’inizio di ciascun mese.
- “Nuovi Clienti”: Il numero di nuovi clienti acquisiti durante il mese.
- “Clienti Finali”: Il numero di clienti alla fine di ciascun mese.
- “Clienti Persi”: Il numero di clienti persi durante il mese.
- “Churn Rate (%)”: La percentuale di clienti persi rispetto ai clienti iniziali.
- Questo DataFrame rappresenta la base dei dati su cui verranno effettuate le analisi.
- Il codice inizia creando un DataFrame pandas che contiene dati mensili relativi ai clienti. Questi dati includono:
-
Salvataggio Iniziale del File Excel:
- Il DataFrame viene salvato in un file Excel denominato “Modello_Churn_Rate_Avanzato.xlsx” nel percorso specificato.
- Viene creato un foglio di lavoro chiamato “Dati Base” che contiene i dati originali.
- Questa parte del codice si assicura che il file excel venga creato, e che nel caso la cartella di destinazione non esista, venga creata.
-
Preparazione delle Analisi Avanzate:
- Viene caricato il file Excel salvato in precedenza utilizzando la libreria openpyxl.
- Viene creato un nuovo foglio di lavoro denominato “Analisi Avanzate” per ospitare le analisi aggiuntive.
- Vengono aggiunti titoli e dati analitici, tra cui:
- “Churn Rate Medio”: La media del Churn Rate mensile.
- “Media Mobile 3M”: La media mobile del Churn Rate calcolata su tre mesi.
- “CLV (Stimato)”: Una stima del Customer Lifetime Value basata sul Churn Rate medio.
- Le formule di excel vengono incluse direttamente nelle celle del foglio di lavoro, in modo che l’utente di excel possa poi vedere i risultati aggiornarsi in automatico.
-
Creazione dei Grafici:
- Vengono creati due grafici a linee utilizzando la libreria openpyxl.chart:
- “Andamento Churn Rate (%)”: Un grafico che mostra l’andamento del Churn Rate nel tempo.
- “Media Mobile Churn Rate (3 mesi)”: Un grafico che mostra la media mobile del Churn Rate.
- I grafici vengono aggiunti al foglio di lavoro “Analisi Avanzate”.
- Vengono creati due grafici a linee utilizzando la libreria openpyxl.chart:
-
Salvataggio Finale:
- Il file Excel modificato viene salvato, includendo i dati originali, le analisi avanzate e i grafici.
Il codice Python
import pandas as pd
import os
from openpyxl import load_workbook
from openpyxl.chart import LineChart, Reference
import matplotlib.pyplot as plt
import numpy as np
# =============================================
# 1. CREAZIONE DATAFRAME INIZIALE
# =============================================
data = {
"Mese": ["Gennaio", "Febbraio", "Marzo", "Aprile", "Maggio", "Giugno"],
"Clienti Iniziali": [2000, 2100, 2200, 2150, 2300, 2400],
"Nuovi Clienti": [400, 350, 300, 450, 400, 500],
"Clienti Finali": [2100, 2200, 2150, 2300, 2400, 2500],
"Clienti Persi": [300, 250, 350, 300, 300, 400], # Valori reali invece di formule per semplificare
"Churn Rate (%)": [15.0, 11.9, 15.9, 14.0, 13.0, 16.7] # Valori precalcolati per evitare problemi
}
df = pd.DataFrame(data)
# =============================================
# 2. SALVATAGGIO INIZIALE DEL FILE
# =============================================
file_path = "Modello_Churn_Rate_Avanzato.xlsx"
directory = os.path.dirname(file_path)
if directory and not os.path.exists(directory):
os.makedirs(directory)
# Salva il dataframe iniziale
df.to_excel(file_path, index=False, sheet_name="Dati Base")
# =============================================
# 3. PREPARAZIONE ANALISI AVANZATE
# =============================================
# Carica il workbook per modifiche aggiuntive
wb = load_workbook(file_path)
# Crea foglio per analisi avanzate
ws_analysis = wb.create_sheet(title="Analisi Avanzate")
# Aggiungi titoli
ws_analysis['A1'] = "Analisi Avanzata Churn Rate e CLV"
ws_analysis['A1'].style = 'Title'
# Aggiungi dati analitici
analisi_data = {
"Metrica": ["Churn Rate Medio", "Media Mobile 3M", "CLV (Stimato)"],
"Valore": [f"=AVERAGE('Dati Base'!F2:F7)", "", "=120/(AVERAGE('Dati Base'!F2:F7)/100)"]
}
for col_num, (col_name, col_data) in enumerate(analisi_data.items(), 1):
ws_analysis.cell(row=2, column=col_num, value=col_name)
for row_num, value in enumerate(col_data, 3):
ws_analysis.cell(row=row_num, column=col_num, value=value)
# =============================================
# 4. CREAZIONE GRAFICI
# =============================================
# Grafico 1: Andamento Churn Rate
chart1 = LineChart()
chart1.title = "Andamento Churn Rate (%)"
chart1.y_axis.title = "Churn Rate %"
chart1.x_axis.title = "Mese"
data = Reference(wb['Dati Base'], min_col=6, min_row=1, max_row=7)
categories = Reference(wb['Dati Base'], min_col=1, min_row=2, max_row=7)
chart1.add_data(data, titles_from_data=True)
chart1.set_categories(categories)
ws_analysis.add_chart(chart1, "A10")
# Grafico 2: Media Mobile
chart2 = LineChart()
chart2.title = "Media Mobile Churn Rate (3 mesi)"
chart2.y_axis.title = "Churn Rate %"
# Aggiungi dati media mobile direttamente al foglio
for i in range(4, 8): # Righe da 4 a 7
if i > 4: # La media mobile inizia dal terzo mese
ws_analysis.cell(row=i, column=3, value=f"=AVERAGE('Dati Base'!F{i-2}:F{i})")
data_avg = Reference(ws_analysis, min_col=3, min_row=4, max_row=7)
chart2.add_data(data_avg, titles_from_data=True)
chart2.set_categories(categories)
ws_analysis.add_chart(chart2, "A30")
# =============================================
# 5. SALVATAGGIO FINALE
# =============================================
wb.save(file_path)
print(f"File creato con successo: {file_path}")
Foglio1:

Foglio2 Analisi Avanzate:



Obiettivi Gestionali
A. Monitoraggio Performance (Operativo)
- Identificare perdite clienti in tempo reale
- Calcolare l’efficacia delle campagne di retention
- Confrontare nuovi clienti vs. clienti persi
B. Prevenzione del Churn (Strategico)
- Allerta precoce: Se il Churn Rate supera una soglia (es. 15%), attivare azioni correttive
- Analisi cause radice: Correlare picchi di abbandono con eventi specifici (cambio prezzi, concorrenza, ecc.)
C. Ottimizzazione Investimenti (Finanziario)
- CLV: Stimare il valore a lungo termine dei clienti
(Es: Se il CLV è 1.200€, si può spendere fino a 1.200€ per acquisire un cliente) - ROI: Confrontare il costo di retention (es. sconti) con il CLV
D. Pianificazione (Tattico)
- Previsioni: Usare la media mobile per stimare il Churn Rate futuro
- Budgeting: Allocare risorse in base al rischio di abbandono
Come Usare il Modello (Step-by-Step)
- Inserire dati mensili nel foglio “Dati Base”:
- Clienti iniziali/finali e nuovi clienti
- I campi “Clienti Persi” e “Churn Rate” si auto-calcolano
- Analizzare il foglio “Analisi Avanzate”:
- Grafico 1: Verificare se il Churn Rate è in miglioramento/peggioramento
- Grafico 2: Cercare trend nella media mobile (es. crescita costante)
- CLV: Decidere se aumentare il budget di retention/acquisizione
- Take Action:
- Se il Churn Rate è alto (> soglia):
- Migliorare il servizio clienti
- Offrire programmi fedeltà
- Se il CLV è basso:
- Aumentare l’ARPU (upselling) o ridurre costi di acquisizione
- Se il Churn Rate è alto (> soglia):
Esempio Pratico
| Mese | Clienti Iniziali | Nuovi Clienti | Clienti Finali | Clienti Persi | Churn Rate (%) |
|---|---|---|---|---|---|
| Gennaio | 2,000 | 400 | 2,100 | 300 | 15.0% |
| Febbraio | 2,100 | 350 | 2,200 | 250 | 11.9% |
Analisi:
Il Churn Rate è sceso da 15% a 11.9% → Le azioni di retention stanno funzionando?
[math]CLV = 120€ / (11.9\%/100) = 1,008€[/math] → Posso spendere fino a 1,008€ per acquisire un cliente.





