Klasteryzacja do segmentacji klientów: przykład kompleksowy
Uczą się Państwo przetwarzać zbiór danych e-commerce, grupować klientów według wydatków i częstotliwości zakupów oraz charakteryzować każdy segment, aby wyciągać wnioski biznesowe.
Klasteryzacja do segmentacji klientów: przykład kompleksowy to bezpłatna lekcja Machine Learning Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Machine Learning Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Machine Learning Academy zawiera 4 lekcji w sumie.
Cel biznesowy: segmentacja klientów
Segmentacja klientów grupuje kupujących według zachowania, aby zespoły marketingowe, produktowe i zajmujące się sukcesem klienta mogły dostosować działania do każdej grupy. Typowe sygnały obejmują aktualność (liczbę dni od ostatniego zakupu), częstotliwość (liczbę zakupów) oraz wartość pieniężną (łączną kwotę wydatków) — jest to model RFM. Klasteryzacja pozwala odkrywać te segmenty na podstawie danych, bez potrzeby definiowania kategorii z góry.
Wczytywanie i analiza zbioru danych
Użyjemy klasycznego zbioru danych Online Retail dataset (UCI ML Repository). Zawiera on około 500 tys. transakcji z datą wystawienia faktury, identyfikatorem klienta, ilością i ceną jednostkową. Naszym pierwszym zadaniem jest wczytanie danych, usunięcie wierszy z brakującymi identyfikatorami klientów, odfiltrowanie zwrotów (ujemnych ilości) oraz obliczenie cech RFM dla każdego klienta.
import pandas as pd
df = pd.read_csv('online_retail.csv', encoding='latin1')
# Drop missing customers and returns
df = df.dropna(subset=['CustomerID'])
df = df[df['Quantity'] > 0]
df['Revenue'] = df['Quantity'] * df['UnitPrice']
df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'])
print(df.shape)
print(df.dtypes)Tworzenie cech RFM
Aktualność: liczba dni od ostatniego zakupu klienta (mniejsza = bardziej aktualny = lepszy wynik). Częstotliwość: liczba unikalnych faktur. Wartość pieniężna: łączny wygenerowany przychód. Obliczamy te wartości względem daty odniesienia (jednego dnia po ostatniej transakcji w zbiorze danych), dzięki czemu aktualność rośnie wraz z brakiem aktywności.
snapshot_date = df['InvoiceDate'].max() + pd.Timedelta(days=1)
rfm = df.groupby('CustomerID').agg(
Recency=('InvoiceDate', lambda x: (snapshot_date - x.max()).days),
Frequency=('InvoiceNo', 'nunique'),
Monetary=('Revenue', 'sum')
).reset_index()
print(rfm.describe())Obsługa wartości odstających i skośności
Cechy RFM często mają silną prawostronną skośność: niewielka grupa klientów VIP dominuje na osi wartości pieniężnej. Przed skalowaniem należy zastosować transformację logarytmiczną (np.log1p), aby skrócić długi ogon rozkładu. Należy ograniczyć skrajne wartości odstające powyżej 99. percentyla, aby pojedynczy klient-wieloryb nie zniekształcił położeń wszystkich centroidów.
import numpy as np
for col in ['Recency', 'Frequency', 'Monetary']:
cap = rfm[col].quantile(0.99)
rfm[col] = rfm[col].clip(upper=cap)
rfm[col + '_log'] = np.log1p(rfm[col])
print(rfm[['Recency_log', 'Frequency_log', 'Monetary_log']].describe())Skalowanie cech dla K-Means
K-Means korzysta z odległości euklidesowej, dlatego cechy muszą być przedstawione w tej samej skali. Po zastosowaniu transformacji logarytmicznej należy użyć StandardScaler, aby wycentrować każdą cechę wokół zera i nadać jej wariancję równą jeden. Skaler należy zawsze dopasowywać wyłącznie do danych treningowych — tutaj do całej tabeli RFM, ponieważ w uczeniu nienadzorowanym nie ma osobnego zbioru testowego.
from sklearn.preprocessing import StandardScaler
features = ['Recency_log', 'Frequency_log', 'Monetary_log']
X = rfm[features].values
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print('Mean after scaling:', X_scaled.mean(axis=0).round(4))
print('Std after scaling:', X_scaled.std(axis=0).round(4))Wybór k za pomocą metody łokcia i sylwetki
Uruchom diagnostykę metodą łokcia i metodą sylwetki na zbiorze RFM, aby wybrać k. W typowym zbiorze danych e-commerce punkt łokcia może znajdować się w okolicy k=4 lub k=5, co odpowiada intuicyjnym segmentom: najlepsi klienci, lojalni klienci, klienci zagrożeni odejściem oraz klienci utraceni.
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
results = []
for k in range(2, 9):
km = KMeans(n_clusters=k, n_init=10, random_state=42)
labels = km.fit_predict(X_scaled)
results.append({'k': k, 'inertia': km.inertia_,
'silhouette': silhouette_score(X_scaled, labels)})
import pandas as pd
print(pd.DataFrame(results))Dopasowanie końcowego modelu klasteryzacji
Po wybraniu k należy dopasować końcowy model K-Means i dodać etykiety klastrów z powrotem do ramki danych RFM. Ułatwia to obliczanie profili segmentów i tworzenie raportów dla klientów. Metoda fit_predict dopasowuje model i zwraca etykiety w jednym wywołaniu.
from sklearn.cluster import KMeans
k = 4
km = KMeans(n_clusters=k, n_init=20, random_state=42)
rfm['Segment'] = km.fit_predict(X_scaled)
print('Cluster sizes:')
print(rfm['Segment'].value_counts())Tworzenie profili segmentów
Oblicz średnią oryginalnych (nieprzekształconych) wartości RFM dla każdego klastra. Otrzymasz w ten sposób zrozumiałe profile biznesowe: najlepsi klienci mają niską aktualność, wysoką częstotliwość i wysoką wartość pieniężną, natomiast klienci utraceni — wysoką aktualność, niską częstotliwość i niską wartość pieniężną. Nazywanie segmentów na podstawie ich profili sprawia, że raporty można przełożyć na konkretne działania.
profile = rfm.groupby('Segment')[['Recency', 'Frequency', 'Monetary']].mean()
print(profile.round(1))
# Optional: label segments by profile
segment_names = {
0: 'Champions',
1: 'At-Risk',
2: 'Loyal',
3: 'Churned'
}
rfm['SegmentName'] = rfm['Segment'].map(segment_names)
print(rfm['SegmentName'].value_counts())Wizualizacja segmentów za pomocą wykresów punktowych
Narysuj wykres częstotliwości względem wartości pieniężnej, używając różnych kolorów dla poszczególnych segmentów. Dodaj aktualność jako rozmiar punktu, aby wizualnie zakodować trzeci wymiar. Ten wykres jest rezultatem, który zespół marketingowy może wykorzystać do identyfikacji klientów, do których należy kierować kampanie reaktywacyjne, a do których kampanie sprzedaży dodatkowej.
import matplotlib.pyplot as plt
plt.figure(figsize=(8, 5))
for seg in rfm['Segment'].unique():
mask = rfm['Segment'] == seg
plt.scatter(rfm.loc[mask, 'Frequency'],
rfm.loc[mask, 'Monetary'],
s=rfm.loc[mask, 'Recency'] + 5,
label=f'Segment {seg}', alpha=0.5)
plt.xlabel('Frequency')
plt.ylabel('Monetary')
plt.legend()
plt.title('RFM Customer Segments')
plt.show()Przypisywanie nowych klientów do segmentów
Po wdrożeniu modelu nowi klienci są przypisywani do segmentów przez przepuszczenie ich przeskalowanego wektora RFM przez ten sam skaler, a następnie wywołanie km.predict. Nie należy ponownie dopasowywać skalera do nowych danych — trzeba użyć skalera dopasowanego do treningowej tabeli RFM, aby uniknąć przesunięcia przestrzeni cech. Po dopasowaniu modelu położenia centroidów pozostają stałe.
import numpy as np
# Simulate a new customer: recency=10, frequency=15, monetary=600
new_customer = np.array([[10, 15, 600]])
new_log = np.log1p(new_customer)
new_scaled = scaler.transform(new_log)
segment = km.predict(new_scaled)[0]
print('New customer segment:', segment)Wnioski biznesowe i kolejne kroki
Klasteryzacja jest punktem wyjścia, a nie celem samym w sobie. Po utworzeniu profili segmentów zespół powinien zaprojektować ukierunkowane działania: wysyłać wiadomości reaktywacyjne do klientów zagrożonych odejściem, oferować nagrody lojalnościowe najlepszym klientom oraz przedstawiać oferty sprzedaży dodatkowej lojalnym klientom. Należy śledzić współczynniki konwersji dla poszczególnych segmentów, aby mierzyć zwrot z inwestycji w segmentację. Model trzeba okresowo trenować ponownie, ponieważ zachowania klientów zmieniają się z czasem.
Szybkie sprawdzenie
Sprawdź swoją wiedzę na temat segmentacji klientów za pomocą klasteryzacji z tej lekcji.
Podsumowanie lekcji
W tej lekcji nauczyli się Państwo, że: cechy RFM (aktualność, częstotliwość, wartość pieniężna) są standardowymi podstawowymi elementami segmentacji klientów, transformacja logarytmiczna i StandardScaler przygotowują skośne cechy RFM do użycia w K-Means, a tworzenie profili segmentów przekształca numery klastrów w użyteczne biznesowo etykiety, takie jak najlepsi klienci i klienci zagrożeni odejściem. W następnej części omówimy PCA — technikę redukcji danych o dużej liczbie wymiarów do ich najbardziej informacyjnych składowych.
Ucz się Python dzięki korepetycjom AI — za darmo
Pisz i uruchamiaj kod w przeglądarce, otrzymuj natychmiastową pomoc od korepetytora AI dostępnego 24/7 i kontynuuj naukę w sieci lub w aplikacji.
- Kursy
- 30
- Lekcje
- 120
Często zadawane pytania
Czy lekcja „Klasteryzacja do segmentacji klientów: przykład kompleksowy” jest bezpłatna?
Tak — pełny tekst „Klasteryzacja do segmentacji klientów: przykład kompleksowy” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Machine Learning Academy, przejdź na CoddyKit PRO. Kurs Machine Learning Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Klasteryzacja do segmentacji klientów: przykład kompleksowy”?
Uczą się Państwo przetwarzać zbiór danych e-commerce, grupować klientów według wydatków i częstotliwości zakupów oraz charakteryzować każdy segment, aby wyciągać wnioski biznesowe. Ćwiczysz Machine Learning Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Machine Learning Academy?
Nie wymagamy żadnego doświadczenia. Machine Learning Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Klasteryzacja do segmentacji klientów: przykład kompleksowy”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Machine Learning Academy?
Tak. Każda lekcja Machine Learning Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- K-Means: centroidy, przypisywanie i aktualizacja
- Wybór K: metoda łokcia i współczynnik sylwetki
- DBSCAN: punkty rdzeniowe, brzegowe i szum
- Klasteryzacja do segmentacji klientów: przykład kompleksowy