Introduzione: oltre il Tier 1, la dinamica comportamentale con geolocalizzazione precisa
_«Il Tier 1 si basa su dati statici: età, genere, reddito. Il Tier 2, invece, inserisce il tempo, la vicinanza e i pattern spaziali dinamici, rendendo la segmentazione sensibile ai cicli locali e ai comportamenti in evoluzione. La geolocalizzazione non è più solo un punto, ma un flusso continuo di movimento e interazione che trasforma i clienti in entità comportamentali vive — un salto tecnologico indispensabile per il marketing locale moderno.»_
Nel marketing territoriale, la capacità di distinguere cluster di clienti non solo per caratteristiche fisse, ma per comportamenti reali e temporali, è diventata la chiave per campagne mirate e ad alto tasso di conversione. Mentre il Tier 1 si affida a dati demografici e storici, il Tier 2 integra frequenza di visita, orari di interazione, distanza da punti vendita e micro-mobilità urbana attraverso feature geolocalizzate ad alta granularità, ottenute da GPS mobile, beacon Bluetooth, triangolazione Wi-Fi e timestamp precisi. Questo consente di creare segmenti dinamici che evolvono ogni 7 giorni, riflettendo la realtà del comportamento reale, non solo una foto istantanea.
Raccolta e pre-elaborazione dei dati geolocalizzati: dalla posizione grezza al valore comportamentale
La qualità del clustering Tier 2 dipende interamente dalla pulizia e dalla trasformazione dei dati geospaziali. La fonte primaria è il GPS da app mobile, integrato con beacon Bluetooth indoor e triangolazione Wi-Fi per coprire aree senza segnale satellitare. A ogni dato temporale (ogni 15 secondi) è associato un evento: acquisto, click nell’app, apertura della località.
Fase 1: sincronizzazione ticker con eventi di interazione
– Usare Apache Kafka per flussi in tempo reale, assicurando timestamp sincronizzati entro ±5 secondi.
– Ogni record contiene: timestamp_ms, lat, lon, accelerometer_x, accelerometer_y, accelerometer_z, evento, client_id
– Validazione automatica: esclusione di posizioni fuori rete o con deviazione >500m rispetto a mappe offline aggiornate (OpenStreetMap + dati locali).
Fase 2: feature engineering avanzato
Trasforma coordinate in indicatori comportamentali:
– distanza minima da punti vendita: calcolata via formula di Haversine, aggiornata ogni 5 minuti con geocodifica inversa.
– tempo_prossimo_ritorno = exp(-eta / 3600) * visit_seq, dove eta è il tempo trascorso dall’ultima visita (definito in finestre adattive: maggiore per fine settimana).
– pattern_visita = {"sett_fin", "sett_sett", "lun_visita", "frequenza_giornaliera"}, raggruppati per cliente e periodo.
Esempio pratico: un cliente che visita un bar ogni mattina alle 8:00, ogni venerdì sera alle 19:30, e ogni domenica alle 11:00, genera un cluster con alta stabilità temporale e geografica, distinguibile da un cliente occasionale che si presenta senza pattern. La validazione con mappe del traffico pedonale in tempo reale (es. tramite Citymapper API o OpenStreetMap heatmap) conferma la coerenza spaziale.
Clustering gerarchico pesato: DBSCAN con metriche geodetiche
Il metodo ideale per il Tier 2 è DBSCAN con distanza geodetica personalizzata, perché il Euclidean ignora la curvatura terrestre e distorce le distanze in contesti urbani. Usiamo librerie Python come Scikit-learn con metriche custom, ma con calcolo di distanza basato sulla formula di Haversine:
def haversine(lat1, lon1, lat2, lon2):
from math import radians, cos, sin, sqrt
R = 6371e3 # raggio medio Terra in metri
dlat = cos(radians(lat2 - lat1)) * R
dlon = cos(radians(lon2 - lon1)) * R
a = sin(dlat/2)**2 + cos(radians(lat1))*cos(radians(lat2))*sin(dlon/2)**2
c = 2*atan2(sqrt(a), sqrt(1-a))
return R * c
I parametri:
– ε = 0.15 km (distanza minima per considerare due punti vicini, adattata a zone pedonali italiane con media distanza visita ~200-300m).
– MinPts = 3 (per evitare cluster di singoli punti isolati).
– metrica = haversine_distance (calcolata in km, convertita in metri per confronto con dati GPS).
Applicazione: clustering ogni 7 giorni, con ricalcolo cluster su dati aggregati, per catturare evoluzioni settimanali e stagionali. Il risultato: cluster dinamici che riflettono comportamenti reali, non snapshot statici.
Segmentazione dinamica: pesi comportamentali e funzioni di decay esponenziale
La chiave del Tier 2 è l’assegnazione di pesi adattivi basati su stagionalità locale. Definiamo una funzione di peso W(t) come combinazione lineare:
W = w1 * frequenza_giornaliera + w2 * prossimità_weight + w3 * engagement_stability
dove:
– frequenza_giornaliera = 1 / (1 + exp(-k*(giorno_settimana - 6))) (maggiore fine settimana),
– prossimità_weight = 1 / (1 + haversine_distanza_media_ultimi_7 giorni) (minore = maggiore attrazione),
– engagement_stability = dev_std(visite_mensili)/media_visite (stabilità alta = maggiore affidabilità).
Esempio: un cliente con 12 visite settimanali, distanza media 150m dai punti vendita, e alta frequenza di ritorni settimanali, ottiene un peso elevato. In contesti turistici, w1 = 0.5; in periferie, w1 = 0.3 per downweight. I pesi vengono ricalcolati settimanalmente, garantendo reattività al cambiamento comportamentale.
Fase 3: profilazione avanzata e analisi spazio-temporale
Dopo il clustering, ogni cluster viene profil