Celem niniejszej pracy jest przeprowadzenie zaawansowanej segmentacji bazy klientów sklepu internetowego (branża odzieżowa) w celu wyodrębnienia jednorodnych grup o unikalnych profilach zakupowych. Projekt realizowany jest na dwóch płaszczyznach:
Cel Biznesowy: Segmentacja pozwoli na szczegółowe poznanie grup klientów o podobnych wzorcach zachowań. Głównym dążeniem jest optymalizacja strategii marketingowej poprzez przejście od marketingu masowego do strategii celowanej.
Cel Metodologiczny: W wymiarze analitycznym celem jest porównanie skuteczności dwóch podejść do grupowania: klasycznej analizy RFM (Recency, Frequency, Monetary) oraz wielowymiarowej analizy opartej na redukcji wymiarów metodą PCA (Principal Component Analysis).
Istotnym elementem badania jest również ocena przydatności zmiennych. Praca ma na celu zweryfikowanie post factum, które z wprowadzonych w rozszerzonej analizie zmiennych faktycznie decydują o odrębności segmentów, a które są w tym procesie pomijalne.
W toku analizy postawiono następujące pytania badawcze:
W odpowiedzi na główny problem badawczy sformułowano hipotezę:
Hipoteza Badawcza: Model oparty na redukcji wymiarów (PCA + K-Means) wyodrębni segmenty klientów różniące się behawioralnie, podczas gdy klasyczny model RFM ograniczy się do podziału opartego na skali wydatków i aktywności (“Duzi” vs “Mali”, “Aktywni” vs “Utraceni”). Miarą potwierdzenia hipotezy będzie niski wskaźnik zgodności (Adjusted Rand Index) między modelami, wskazujący na wykrycie fundamentalnie odmiennych struktur w danych.
Analizie poddano zbiór danych transakcyjnych pochodzący ze sklepu e-commerce z branży odzieżowej, obejmujący 5-letni okres działalności (lata 2021–2025). Dane obejmują historię zamówień, w tym informacje o:
Proces badawczy przebiega w następujących etapach:
Celem tego etapu jest transformacja surowych danych transakcyjnych w ustrukturyzowaną macierz cech, która posłuży do budowy modeli segmentacyjnych. Proces ten składa się z trzech kluczowych kroków: importu zbioru, anonimizacji danych oraz agregacji zmiennych do poziomu klienta.
W trosce o ochronę prywatności klientów oraz zgodnie z dobrymi praktykami analizy danych, usunięto kolumny zawierające dane osobowe.
Oryginalny identyfikator klienta (client_id, zawierający
adresy e-mail) został zastąpiony sztucznym kluczem (np.
C_00001). Mapa powiązań została odseparowana, a dalsza
analiza odbywa się wyłącznie na zanonimizowanym zbiorze df.
Pozwala to na bezpieczne przetwarzanie danych bez ryzyka naruszenia
prywatności.
Tabela poniżej przedstawia wygląd surowych danych po anonimizacji, w kolejnym kroku na ich podstawie zagregowano zmienne do poziomu klienta.
## Rows: 50,833
## Columns: 22
## $ client_id <chr> "C_00001", "C_00002", "C_00003", "C_00004", "…
## $ order_id <dbl> 61888, 61896, 61899, 61901, 61903, 61905, 619…
## $ order_date <dttm> 2021-01-14 10:05:06, 2021-01-14 15:46:10, 20…
## $ country_id <chr> "PL", "PL", "PL", "PL", "PL", "PL", "PL", "PL…
## $ currency <chr> "PLN", "PLN", "PLN", "PLN", "PLN", "PLN", "PL…
## $ order_origin <chr> "Nieznane", "Nieznane", "Nieznane", "Nieznane…
## $ coupon_code <chr> NA, NA, "mirecki", NA, NA, NA, "romanowski", …
## $ discount_amount <dbl> 0, 0, 139, 0, 0, 0, 278, 0, 278, 278, 0, 0, 1…
## $ total_amount_afterrefund <dbl> 210, 289, 150, 210, 289, 211, 12, 290, 289, 2…
## $ total_items <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, …
## $ item_name <chr> "Pakker Linen – Gold - M (170-180cm/~80kg)", …
## $ item_quantity <dbl> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, …
## $ item_price <dbl> 278, 278, 278, 278, 278, 278, 278, 278, 278, …
## $ item_price_paid <dbl> 199, 278, 139, 199, 278, 199, 0, 278, 139, 13…
## $ model <chr> "Linen I", "Linen I", "Cotton I", "Linen I", …
## $ category <chr> "Linen", "Linen", "Cotton", "Linen", "Cotton"…
## $ color <chr> "Gold", "Black", "Black Sea", "Gold", "Black …
## $ prod_cost <dbl> 126, 126, 117, 126, 117, 126, 117, 117, 117, …
## $ size <chr> "M", "XL", "L", "M", "L", "L", "L", "M", "M",…
## $ line_revenue <dbl> 199, 278, 139, 199, 278, 199, 0, 278, 139, 13…
## $ profit_amount <dbl> 73, 152, 22, 73, 161, 73, -117, 161, 22, 22, …
## $ profit_margin <dbl> 36.68342, 54.67626, 15.82734, 36.68342, 57.91…
Surowe dane transakcyjne nie nadają się bezpośrednio do klastrowania.
Konieczna jest ich agregacja do poziomu unikalnego klienta. W tym celu
stworzono wektor cech (customer_features) składający się z
10 zmiennych, które opisują klienta w czterech
kluczowych wymiarach.
Dobór zmiennych podyktowany był specyfiką branży odzieżowej, gdzie istotny jest nie tylko fakt zakupu, ale także styl i przywiązanie do marki.
Zmienne do Modelu:
A. Wymiar Klasyczny (RFM) Stanowi fundament segmentacji w handlu detalicznym:
Recency: Liczba dni od ostatniego
zakupu (Miernik aktywności klienta).Frequency: Całkowita liczba unikalnych
zamówień.Monetary_Total: Łączna wartość
przychodów wygenerowana przez klienta.B. Wymiar Finansowy
Avg_Basket_Value: Średnia wartość
zamówienia (AOV). Pozwala odróżnić klientów kupujących rzadko, ale
drogo, od tych kupujących często w mniejszych ilościach.Coupon_Ratio: Odsetek zamówień z
użyciem kodu rabatowego. Odróżnia “łowców okazji” od klientów kupujących
w pełnej cenie.C. Wymiar Czasu i Lojalności
Tenure: Staż klienta w dniach (od
pierwszego zakupu). Kluczowy do odróżnienia nowych klientów od
lojalnych, powracających klientów.Avg_Time_Between: Średni odstęp czasu
(w dniach) między kolejnymi zakupami. Mierzy regularność powrotów.D. Wymiar Produktu i Stylu
Basic_Color_Share: Udział produktów w
kolorach klasycznych (czarny, granat, brązowy) w całym koszyku (ważony
liczbą sztuk). Pozwala wyodrębnić klientów zachowawczych od osób
poszukujących modowych nowości.Top_Category_Share: Stopień
koncentracji na jednej kategorii. Określa, czy klient kupuje tylko jeden
typ asortymentu (np. przychodzi wyłącznie po spodnie lniane), czy
próbuje różnych kategorii produktów.Model_Variety: Średnia liczba
unikalnych modeli na zamówienie. Mierzy różnorodność wewnątrz
zamówienia. Odróżnia klienta, który szuka stylu i zamawia różne fasony
do przymiarki, od klienta, który kupuje “na zapas” wiele sztuk tego
samego, sprawdzonego modelu.Uwaga metodologiczna: Zmienne Monetary_Profit
oraz Total_Discount zostały wyliczone w celach
diagnostycznych, aby zbadać anomalie i wykluczyć błędne rekordy. Nie
będą one jednak użyte bezpośrednio w modelu klastrowania PCA.
| client_id | Recency | Frequency | Monetary_Total | Avg_Basket_Value | Coupon_Ratio | Tenure | Avg_Time_Between | Basic_Color_Share | Top_Category_Share | Model_Variety | Monetary_Profit | Total_Discount |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| C_00001 | 1793.15 | 1 | 199 | 199.0 | 0 | 1793.15 | 110.10 | 0 | 1.0 | 1 | 73 | 79 |
| C_00002 | 1792.91 | 1 | 278 | 278.0 | 0 | 1792.91 | 110.10 | 1 | 1.0 | 1 | 152 | 0 |
| C_00003 | 1792.88 | 1 | 139 | 139.0 | 1 | 1792.88 | 110.10 | 1 | 1.0 | 1 | 22 | 139 |
| C_00004 | 61.17 | 2 | 537 | 268.5 | 0 | 1792.60 | 865.71 | 0 | 0.5 | 1 | 295 | 179 |
| C_00005 | 315.81 | 2 | 616 | 308.0 | 0 | 1792.58 | 738.39 | 1 | 1.0 | 1 | 391 | 0 |
Przed przystąpieniem do właściwego modelowania (K-Means i PCA), konieczne jest dogłębne zrozumienie struktury zgromadzonych danych. Etap Analizy Eksploracyjnej (Exploratory Data Analysis) w niniejszym projekcie realizuje cztery kluczowe cele badawcze:
Pierwszym krokiem jest upewnienie się, że proces agregacji zmiennych nie wygenerował pustych wartości (np. w wyniku dzielenia przez zero przy obliczaniu średnich). Algorytmy PCA i K-Means nie obsługują braków danych (NA), dlatego ich ewentualne wystąpienie wymagałoby imputacji lub usunięcia rekordów.
# Sprawdzenie liczby NA w każdej kolumnie
na_count <- colSums(is.na(customer_features))
# Wyświetlenie tylko tych kolumn, gdzie są braki
na_table <- data.frame(Brakujace_Wartosci = na_count[na_count > 0])
if(nrow(na_table) > 0) {
kable(na_table, caption = "Zmienne z brakującymi danymi")
} else {
print("Brak pustych wartości (NA) w zbiorze danych.")
}
## [1] "Brak pustych wartości (NA) w zbiorze danych."
W danych transakcyjnych e-commerce typowym zjawiskiem jest występowanie rozkładów potęgowych (Zasada Pareto), gdzie wąska grupa klientów generuje większość przychodu. Poniższa analiza ma na celu zidentyfikowanie zmiennych o silnej asymetrii prawostronnej. Większość algorytmów klastrujących opartych na odległościach (w tym K-Means) zakłada zbliżony do normalnego rozkład zmiennych. Silna prawoskośność będzie przesłanką do zastosowania transformacji logarytmicznej.
| skew | min | max | mean | median | |
|---|---|---|---|---|---|
| Total_Discount | 7.0003230 | 0.0000000 | 4228.2900 | 78.5638479 | 0.0000 |
| Monetary_Total | 4.1180340 | 0.0000000 | 17913.7600 | 809.7069586 | 547.0000 |
| Monetary_Profit | 3.9876772 | -757.0000000 | 10561.7600 | 483.5363475 | 299.0000 |
| Avg_Basket_Value | 3.9795814 | 0.0000000 | 5145.0000 | 404.6437203 | 338.0000 |
| Frequency | 3.4148976 | 1.0000000 | 27.0000 | 1.9946285 | 1.0000 |
| Avg_Time_Between | 2.7769572 | 0.0000289 | 865.7123 | 127.8935019 | 110.1015 |
| Model_Variety | 2.5847603 | 0.2000000 | 6.0000 | 1.1349470 | 1.0000 |
| Coupon_Ratio | 1.1230264 | 0.0000000 | 1.0000 | 0.2475777 | 0.0000 |
| Recency | 0.8175334 | 1.0000000 | 1793.1457 | 548.5515245 | 325.0695 |
| Tenure | 0.2891898 | 1.0148148 | 1793.1457 | 763.7440729 | 677.7514 |
| Basic_Color_Share | -0.3251042 | 0.0000000 | 1.0000 | 0.5815054 | 0.6250 |
| Top_Category_Share | -0.5326350 | 0.1111111 | 1.0000 | 0.7698856 | 1.0000 |
Interpretacja wyników analizy statystycznej:
Przeprowadzona analiza statystyk opisowych potwierdza występowanie silnej asymetrii prawostronnej dla kluczowych zmiennych ilościowych. Jest to zjawisko charakterystyczne dla danych transakcyjnych, gdzie większość klientów przyjmuje niskie wartości cech, a wąska grupa liderów generuje wartości ekstremalne.
Kluczowe obserwacje:
Total_Discount (7.00) oraz
Monetary_Total (4.12). Również Frequency
(3.41) wskazuje na silny “długi ogon” – mediana wynosi 1.0, co oznacza,
że typowy klient dokonał tylko jednego zakupu, podczas gdy rekordzista
aż 27.Avg_Basket_Value (3.98) oraz Avg_Time_Between
(2.78) również znacząco przekraczają próg skośności 1.0. Pozostawienie
ich w surowej formie spowodowałoby, że algorytm K-Means byłby
niestabilny i zdominowany przez wartości odstające.Top_Category_Share (-0.53) z medianą 1.0. Oznacza to, że
większość klientów kupuje produkty tylko z jednej kategorii, a
mniejszość ma koszyki zróżnicowane.Decyzja metodyczna:
W celu przygotowania danych do modelowania, dla wszystkich zmiennych
o skośności bezwzględnej \(> 1\)
(tzn. Monetary, Frequency,
Avg_Basket, Discount,
Time_Between, Model_Variety) zastosowana
zostanie transformacja logarytmiczna
(log1p).
Zmienne o niższej skośności (Recency,
Tenure) oraz udziały procentowe (Share)
zostaną poddane jedynie standaryzacji, ponieważ ich rozkłady są
wystarczająco zbliżone do symetrycznych lub ich natura (ograniczenie
0-1) nie wymaga logarytmowania.
Mimo wstępnego odfiltrowania znanych kont technicznych, weryfikujemy bazę pod kątem anomalii biznesowych, które mogłyby zniekształcić profilowanie segmentów.
Analizowane relacje:
Interpretacja wyników detekcji anomalii
Wizualna analiza relacji między sumą udzielonych rabatów a przychodem całkowitym pozwoliła na zidentyfikowanie specyficznych grup rekordów wykraczających poza standardowy profil klienta detalicznego. Szczególną uwagę zwracają:
Na podstawie powyższej diagnozy podjęto decyzję o wykluczeniu ze
zbioru danych klientów, dla których wskaźnik
Monetary_Profit przyjął wartości mniejsze lub równe zero.
Działanie to wynika z następujących przesłanek:
W wyniku filtracji końcowy zbiór danych pozwala na rzetelną ocenę zaangażowania i lojalności, opierając się na sprawdzonych metrykach finansowych i czasowych.
## Liczba klientów przed weryfikacją: 18803
## Liczba klientów po usunięciu anomalii: 18575
## Usunięto rekordów: 228
Jednym z głównych założeń klasycznego algorytmu K-Means jest niezależność zmiennych. Silna korelacja liniowa między cechami prowadzi do zjawiska “double counting” (nadmiernego ważenia tych samych informacji), co zniekształca wyniki segmentacji.
Analiza Macierzy Korelacji: Poniższy wykres prezentuje siłę powiązań między zmiennymi.
Interpretacja macierzy korelacji
Analiza macierzy korelacji Pearsona ujawniła kilka kluczowych zależności, które determinują strukturę zbioru danych i uzasadniają potrzebę redukcji wymiarów (PCA):
Frequency a
Monetary_Total (0.84) potwierdza, że
łączny obrót jest niemal bezpośrednią funkcją liczby transakcji.Recency a Tenure
(0.71) wskazuje na istotny związek czasowy - to
spodziewany wynik, ponieważ większość klietntów składała jedno
zamówienie (mediana Frequency to 1) stąd mają oni takie
samo Recencyoraz Tenure.Avg_Basket_Value wykazuje korelację z
Monetary_Total (0.42) oraz z
Model_Variety (0.68). Potwierdza to
logiczną strukturę: klienci generujący wysoki obrót to często osoby
kupujące wiele różnych modeli w ramach jednego zamówienia, co czyni
“wartość koszyka” kluczowym predyktorem wartości klienta.Top_Category_Share):
Frequency, Monetary).Color_Share oraz
Coupon_Ratio wykazują śladowe korelacje z pozostałymi
metrykami. Sugeruje to, że preferencje kolorystyczne oraz wrażliwość na
promocje są cechami indywidualnymi, niezależnymi od skali wydatków
klienta.Wniosek metodologiczny: Obecność tak silnych korelacji (powyżej 0.7 i 0.8) oznacza, że surowe dane wprowadzane do modelu klastrowania byłyby obciążone powtarzającymi się informacjami. Zastosowanie PCA pozwoli na ortogonalizację tych wymiarów i budowę stabilniejszego i bardziej obiektywnego modelu segmentacyjnego.
Ostatnim krokiem przed modelowaniem jest weryfikacja hipotezy, że badany zbiór danych w ogóle posiada strukturę grupową. Klastrowanie danych o rozkładzie jednostajnym (losowym) prowadziłoby do fałszywych wniosków.
W tym celu wykorzystano dwie metody:
# Pobieramy próbkę i skalujemy ją (wymóg algorytmu Hopkinsa)
df_sample <- customer_features %>%
select(where(is.numeric)) %>%
sample_n(min(nrow(.), 1000)) %>%
scale()
# Obliczenie statystyki Hopkinsa i macierz niepodobieństwa
res <- get_clust_tendency(df_sample, n = nrow(df_sample)-1, graph = TRUE)
cat("Statystyka Hopkinsa (H):", round(res$hopkins_stat, 4))
## Statystyka Hopkinsa (H): 0.9123
# Macierz niepodobieństwa
print(res$plot + labs(title = "Macierz niepodobieństwa",
subtitle = "Czerwone bloki na przekątnej = Klastry"))
Interpretacja wyników tendencji do klastrowania
Wyniki obu testów jednoznacznie potwierdzają wysoką jakość zbioru danych pod kątem klastrowania:
Statystyka Hopkinsa: Uzyskany wynik \(H = 0.90\) znacząco przekracza teoretyczny próg losowości (0.5) oraz próg wysokiej tendencji (0.7). Oznacza to, że dane są w 90% „nie-losowe” i posiadają bardzo silną, naturalną strukturę skupisk. Jest to silny dowód statystyczny na to, że algorytmy K-Means i PCA będą operować na rzeczywistych wzorcach zachowań klientów, a nie na losowym szumie.
Uporządkowana Macierz Niepodobieństwa): Na wygenerowanej mapie ciepła widoczne są wyraźne, ciemne bloki wzdłuż głównej przekątnej.
Podsumowanie etapu EDA: Zakończona Analiza Eksploracyjna potwierdziła, że dane są:
Z tak przygotowanym fundamentem merytorycznym możemy przejść do właściwego modelowania.
Zakończony etap analizy eksploracyjnej (EDA) potwierdził, że dane posiadają strukturę klastrowalną, ale wymagają transformacji ze względu na silną skośność.
Przed zastosowaniem zaawansowanego podejścia wielowymiarowego (PCA), w pierwszej kolejności zbudujemy Model Referencyjny oparty na klasycznej analizie RFM (Recency, Frequency, Monetary). Model ten posłuży jako punkt odniesienia do oceny, czy późniejsze dodanie zmiennych behawioralnych i redukcja wymiarów (PCA) faktycznie wnosi nową jakość w profilowaniu klientów.
Algorytm K-Means, jako metoda oparta na odległościach euklidesowych, jest wrażliwy na rzędy wielkości zmiennych. Surowe dane RFM nie mogą zostać użyte bezpośrednio, ponieważ:
Monetary_Total
(wartości w tysiącach) zdominowałaby zmienną Frequency
(pojedyncze sztuki), sprawiając, że klastrowanie odbywałoby się de
facto tylko po przychodzie.# 1. Selekcja zmiennych do modelu RFM
rfm_features <- c("Recency", "Frequency", "Monetary_Total")
# Tworzymy podzbiór danych tylko z tymi kolumnami
df_rfm_raw <- df_cleaned %>%
select(all_of(rfm_features))
# 2. Transformacja Logarytmiczna (log1p)
df_rfm_log <- df_rfm_raw %>%
mutate(across(everything(), log1p))
# 3. Standaryzacja (Z-score scaling)
df_rfm_scaled <- scale(df_rfm_log) %>%
as.data.frame()
# 4. Weryfikacja przygotowania danych
summary_stats <- describe(df_rfm_scaled) %>%
select(mean, sd, min, max, skew)
kable(summary_stats, digits = 2,
caption = "Statystyki opisowe zmiennych RFM po logarytmizacji i standaryzacji")
| mean | sd | min | max | skew | |
|---|---|---|---|---|---|
| Recency | 0 | 1 | -3.56 | 1.33 | -0.80 |
| Frequency | 0 | 1 | -0.72 | 5.61 | 1.46 |
| Monetary_Total | 0 | 1 | -3.25 | 4.60 | 0.74 |
W zastosowaniu algorytmu K-Means wybór parametru \(k\) (liczby klastrów) jest decyzją krytyczną – zbyt mała liczba zatraci niuanse behawioralne, a zbyt duża doprowadzi do nadmiernego rozdrobnienia grup.
Aby podjąć decyzję w sposób obiektywny, zastosujemy dwie komplementarne heurystyki:
Na podstawie analizy wykresów osypiska i sylwetki, ustalono optymalną liczbę klastrów na poziomie \(k=4\). Taki podział zapewnia równowagę między precyzją segmentacji a użytecznością biznesową.
Poniższy kod uruchamia algorytm K-Means na przygotowanych danych, a następnie profiluje wyodrębnione segmenty, obliczając średnie wartości rzeczywiste (przed transformacją) dla każdej grupy.
# Ziarno dla powtarzalności wyników
set.seed(123)
# 1. Uruchomienie algorytmu K-Means
rfm_kmeans <- kmeans(df_rfm_scaled, centers = 4, nstart = 25)
# 2. Wizualizacja Klastrów
fviz_cluster(rfm_kmeans, data = df_rfm_scaled,
geom = "point",
ellipse.type = "convex",
ggtheme = theme_minimal(),
main = "Wizualizacja Segmentów RFM (k=4)")
# 3. Przypisanie klastrów do oryginalnych danych
df_rfm_results <- df_cleaned %>%
mutate(Cluster_RFM = as.factor(rfm_kmeans$cluster))
# 4. Profilowanie Segmentów (Interpretacja Biznesowa)
# Obliczamy średnie dla R, F, M w każdym klastrze
rfm_summary <- df_rfm_results %>%
group_by(Cluster_RFM) %>%
summarise(
Liczba_Klientow = n(),
Udzial_Proc = n() / nrow(.) * 100,
Sredni_Recency = mean(Recency, na.rm=TRUE),
Srednia_Frequency = mean(Frequency, na.rm=TRUE),
Srednie_Monetary = mean(Monetary_Total, na.rm=TRUE)
) %>%
arrange(desc(Srednie_Monetary))
# Wyświetlenie tabeli
kable(rfm_summary, digits = 1, caption = "Charakterystyka wyodrębnionych segmentów (RFM)")
| Cluster_RFM | Liczba_Klientow | Udzial_Proc | Sredni_Recency | Srednia_Frequency | Srednie_Monetary |
|---|---|---|---|---|---|
| 4 | 2654 | 14.3 | 142.6 | 5.3 | 2308.8 |
| 2 | 4632 | 24.9 | 558.0 | 2.3 | 960.0 |
| 3 | 3304 | 17.8 | 64.0 | 1.3 | 560.7 |
| 1 | 7985 | 43.0 | 874.4 | 1.0 | 345.4 |
Analiza średnich wartości w wyodrębnionych grupach pozwala na jednoznaczną interpretację biznesową segmentów klientów.
Monetary i Frequency. To najlepsi klienci
generujący największy przychód.Recency.Recency (niedawno kupili), ale niskim
Frequency (większość tylko jeden zakup).Recency).W tym etapie przechodzimy do weryfikacji głównej hipotezy badawczej. Wykorzystamy Analizę Głównych Składowych (PCA), aby zredukować wymiarowość zbioru danych, zachowując jednocześnie jak najwięcej informacji o niuansach zachowań klientów (nie tylko RFM)
Do analizy PCA potrzebujemy pełnego zestawu zmiennych behawioralnych. W przeciwieństwie do modelu RFM (gdzie mieliśmy tylko 3 cechy), tutaj musimy przygotować wszystkie zmienne, które mogą różnicować klientów.
Przygotowanie danych:
Monetary_Profit, Total_Discount) oraz
identyfikatory (client_id).log1p dla zmiennych o wysokiej skośności (zidentyfikowanych
w EDA).# 1. Selekcja zmiennych do PCA
# Wykluczamy:
# - Zmienne diagnostyczne (Profit, Discount - zgodnie z EDA)
# - Wyniki poprzedniego modelu (Cluster_RFM)
# - Zmienne tekstowe (client_id)
cols_to_exclude <- c("client_id", "Monetary_Profit", "Total_Discount",
"Cluster_RFM")
df_pca_raw <- df_cleaned %>%
select(-any_of(cols_to_exclude)) %>%
select(where(is.numeric)) # Dla pewności bierzemy tylko liczby
# 2. Transformacja Logarytmiczna
# Lista zmiennych do zlogarytmowania (z analizy skośności w EDA)
cols_to_log <- c("Monetary_Total", "Frequency", "Avg_Basket_Value",
"Avg_Time_Between", "Model_Variety")
# Aplikujemy logarytm tylko do tych kolumn, które faktycznie są w df_pca_raw
cols_present <- intersect(cols_to_log, names(df_pca_raw))
df_pca_log <- df_pca_raw %>%
mutate(across(all_of(cols_present), log1p))
# 3. Standaryzacja (Z-score) i Obliczenie PCA
pca_result <- prcomp(df_pca_log, center = TRUE, scale. = TRUE)
# 4. Wykres osypiska (Scree Plot)
fviz_eig(pca_result, addlabels = TRUE, ylim = c(0, 50),
main = "Wykres osypiska (Scree Plot)",
barfill = "steelblue", barcolor = "steelblue") +
theme_minimal() +
labs(x = "Główne Składowe (Dimensions)", y = "% Wyjaśnionej Wariancji")
# 5. Tabela wartości własnych (Eigenvalues)
eig_val <- get_eigenvalue(pca_result)
kable(head(eig_val, 10), caption = "Wartości własne i procent wyjaśnionej wariancji")
| eigenvalue | variance.percent | cumulative.variance.percent | |
|---|---|---|---|
| Dim.1 | 3.0948928 | 30.9489279 | 30.94893 |
| Dim.2 | 1.8877370 | 18.8773700 | 49.82630 |
| Dim.3 | 1.5432472 | 15.4324715 | 65.25877 |
| Dim.4 | 1.0046111 | 10.0461109 | 75.30488 |
| Dim.5 | 0.9845546 | 9.8455456 | 85.15043 |
| Dim.6 | 0.8991058 | 8.9910581 | 94.14148 |
| Dim.7 | 0.4417397 | 4.4173967 | 98.55888 |
| Dim.8 | 0.0945135 | 0.9451349 | 99.50402 |
| Dim.9 | 0.0475431 | 0.4754312 | 99.97945 |
| Dim.10 | 0.0020553 | 0.0205532 | 100.00000 |
W celu wyboru optymalnej liczby głównych składowych (PC) do dalszego klastrowania, zastosowano trzy kryteria:
Zastosowanie 5 wymiarów pozwala na redukcję szumu informacyjnego przy jednoczesnym zachowaniu wielowymiarowego profilu klienta, wykraczającego poza proste metryki finansowe.
Decyzja o wyborze 5 pierwszych składowych (PC1-PC5) pozwala na znaczną redukcję wymiarowości. Aby jednak segmentacja była interpretowalna biznesowo, musimy zrozumieć, jakie zmienne pierwotne budują każdy z nowych wymiarów.
W tym celu analizujemy ładunki (loadings), czyli korelacje między oryginalnymi cechami a składowymi głównymi.
| PC1 | PC2 | PC3 | PC4 | PC5 | |
|---|---|---|---|---|---|
| Recency | -0.31 | 0.40 | -0.34 | -0.21 | -0.31 |
| Frequency | 0.41 | 0.37 | 0.34 | 0.07 | 0.11 |
| Monetary_Total | 0.53 | 0.13 | 0.11 | 0.01 | 0.03 |
| Avg_Basket_Value | 0.37 | -0.33 | -0.33 | -0.08 | -0.09 |
| Coupon_Ratio | 0.15 | 0.18 | 0.06 | -0.16 | -0.50 |
| Tenure | -0.05 | 0.66 | -0.26 | 0.01 | 0.00 |
| Avg_Time_Between | 0.00 | 0.17 | -0.39 | 0.44 | 0.59 |
| Basic_Color_Share | -0.02 | -0.04 | 0.02 | 0.85 | -0.51 |
| Top_Category_Share | -0.49 | -0.17 | 0.10 | 0.02 | 0.06 |
| Model_Variety | 0.24 | -0.20 | -0.64 | -0.06 | -0.13 |
Szczegółowa analiza macierzy rotacji oraz wkładów zmiennych w wymiary pozwoliła na zidentyfikowanie natury nowych wymiarów, w których będziemy klastrować klientów:
Monetary, Frequency oraz
Avg_Basket_Value. Co ciekawe, PC1 jest ujemnie powiązane z
Top_Category_Share. Potwierdza to, że duzi klienci
dywersyfikują koszyk, podczas gdy klienci o niskiej wartości skupiają
się na pojedynczych produktach (100% udziału w jednej kategorii).Tenure, Recency oraz Frequency.
Ten wymiar pozwala odróżnić długofalową lojalność od chwilowych skoków
aktywności.Model_Variety oraz Avg_Time_Between. Wymiar
ten opisuje “rytmiczność” i różnorodność zakupów.Basic_Color_Share, Avg_Time_Between oraz
Coupon_Ratio. Są to wymiary opisujące “charakter” zakupów,
których klasyczny model RFM zupełnie nie dostrzega.Mając zdefiniowane 5 głównych składowych (PC1-PC5), które niosą ze sobą zarówno informacje finansowe, jak i stylowe, musimy wyznaczyć nową optymalną liczbę segmentów.
Analiza wskaźników heurystycznych nie dała jednoznacznego rozstrzygnięcia – wyniki nie sugerują optymalnej liczby klastrów. W sytuacjach, gdy metody graficzne nie są konkluzywne, konieczne jest zastosowanie rygorystycznych testów statystycznych. Zdecydowano, biorąc pod uwagę wcześniejsze wyniki, że optymalna struktura leży gdzieś na pograniczu 4 i 5 grup.
Statystyczna weryfikacja: Test Duda-Hart
W związku z brakiem jednoznaczności, do podjęcia ostatecznej decyzji wykorzystano test Duda-Hart. Jest to formalna procedura sprawdzająca, czy dany klaster powinien zostać podzielony na dwa subklastry:
# Ziarno dla powtarzalności wyniku
set.seed(123)
# Uruchomienie obu modeli
pca_k4 <- kmeans(pca_data_for_clustering, centers = 4, nstart = 25)
pca_k5 <- kmeans(pca_data_for_clustering, centers = 5, nstart = 25)
# Test Duda-Hart dla przestrzeni
dh_test <- dudahart2(pca_data_for_clustering, pca_k4$cluster)
# Wynik dh_test$cluster1 == FALSE oznacza rekomendację podziału (odrzucenie H0)
print(dh_test)
## $p.value
## [1] 0
##
## $dh
## [1] 0.2129757
##
## $compare
## [1] 0.8595495
##
## $cluster1
## [1] FALSE
##
## $alpha
## [1] 0.001
##
## $z
## [1] 3.090232
Decyzja o wyborze wariantu k=5 została podjęta na
podstawie odrzucenia hipotezy zerowej (wynik
cluster1 = FALSE). Stanowi to statystyczne potwierdzenie,
że dodatkowy podział bazy ujawnia istotne i odrębne wzorce zachowań,
które w modelu o mniejszej liczbie klastrów pozostałyby ukryte.
Jednakże, wciąż zbudowany zostanie model z 4 klastrami w celu
sprawdzenia czy wprowadzenie dodatkowego klastra było słuszną
decyzją.
Poniżej zestawiono charakterystykę segmentów dla obu wariantów. Pozwoli to ocenić, czy dodanie piątego klastra wyodrębnia nową, logiczną grupę biznesową, czy jedynie rozbija istniejące grupy bez wyraźnego zysku informacyjnego. Tabele poniżej przedstawiają podział klientów na segmenty i średnie wartości zmiennych w tych segmentach.
| Cluster_PCA_4 | Liczba | Udzial | Monetary | Frequency | Recency | Coupon_Ratio | Model_Variety | Basic_Color | Top_Category | Tenure | AOV | Avg_Time_Between |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2 | 4260 | 22.93 | 1703.80 | 4.32 | 286.32 | 0.38 | 1.02 | 0.57 | 0.48 | 1057.58 | 389.33 | 206.73 |
| 1 | 2737 | 14.73 | 1101.92 | 1.48 | 494.66 | 0.31 | 2.06 | 0.57 | 0.49 | 607.70 | 745.47 | 117.69 |
| 3 | 6716 | 36.16 | 478.81 | 1.30 | 253.19 | 0.13 | 0.95 | 0.60 | 0.93 | 281.17 | 369.96 | 94.00 |
| 4 | 4862 | 26.17 | 348.69 | 1.23 | 1209.86 | 0.25 | 0.98 | 0.58 | 0.95 | 1260.89 | 287.02 | 112.54 |
| Cluster_PCA_5 | Liczba | Udzial | Monetary | Frequency | Recency | Coupon_Ratio | Model_Variety | Basic_Color | Top_Category | Tenure | AOV | Avg_Time_Between |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 3888 | 20.93 | 1728.95 | 4.39 | 291.73 | 0.36 | 1.04 | 0.57 | 0.48 | 1127.17 | 388.49 | 223.58 |
| 2 | 2504 | 13.48 | 1078.74 | 1.42 | 505.51 | 0.30 | 2.11 | 0.57 | 0.49 | 623.25 | 758.31 | 126.28 |
| 3 | 2135 | 11.49 | 955.73 | 2.40 | 315.65 | 0.37 | 0.88 | 0.57 | 0.67 | 369.37 | 397.95 | 21.59 |
| 5 | 5554 | 29.90 | 396.35 | 1.09 | 275.74 | 0.09 | 0.99 | 0.61 | 0.98 | 302.76 | 366.69 | 114.13 |
| 4 | 4494 | 24.19 | 338.23 | 1.20 | 1235.19 | 0.25 | 0.98 | 0.57 | 0.96 | 1284.87 | 285.61 | 114.78 |
Aby dokonać ostatecznej charakterystyki biznesowej każdego segmentu i ułatwić interpretacje wyników przez ich wizualizację, zastosowano technikę Snake Plot. Metoda ta polega na standaryzacji wszystkich zmiennych do wspólnej skali (\(Z\)-score), gdzie:
Wizualizacja ta pozwala na bezpośrednie porównanie zmiennych o różnych jednostkach (np. kwoty w PLN, czas w dniach, udziały w %) i błyskawiczne zidentyfikowanie wyróżników każdego klastra.
Analiza średnich wartości cech w połączeniu z liczebnością grup pozwoliła na zidentyfikowanie 5 wyrazistych archetypów klientów. Model PCA, dzięki uwzględnieniu zmiennych behawioralnych (kupony, styl, staż), skutecznie rozróżnił typy klientów na wczesnym etapie cyklu życia i dokładniej odseparował utraconych klientów.
Poniżej przedstawiono szczegółową charakterystykę wyodrębnionych segmentów wraz z ich udziałem w bazie (\(N=18 576\)):
Klaster 1: Champions (Stała Elita)
Monetary ~1728 PLN) i częstotliwości
(Frequency ~4.4).Tenure) połączony z regularnością.Klaster 2: Occasional Big Spenders (Zasobni Okazjonalni)
Model_Variety) przy rzadkich wizytach.Klaster 3: Fresh Enthusiasts (Wschodzące Gwiazdy)
Tenure), którzy w krótkim czasie złożyli już 2-3
zamówienia.Avg_Time_Between) przy krótkim stażu.Klaster 4: Lost (Utraceni)
Klaster 5: New Passive (Nowi / Jednorazowi)
Coupon_Ratio ~ 0.09) oraz wysoka koncentracja
kategorii (0.98).Analiza Porównawcza Wariantów: Co tracimy przy k=4?
Porównanie charakterystyk segmentów w modelach PCA dla \(k=4\) i \(k=5\) ujawniło istotne różnice w interpretacji “nowych” klientów.
Analiza przepływów między modelami wskazuje na stabilność grup skrajnych (Champions, Lost, Big Spenders), ale demonstruje utratę krytycznej informacji behawioralnej w środkowej części bazy przy wyborze mniejszej liczby klastrów.
Mapowanie grup (\(k=4\) vs \(k=5\)):
Recency i Tenure).
Model \(k=5\) pokazał, że nowi klienci
różnią się behawioralnie i podzielił ich na Fresh
Enthusiasts oraz New Passive.Ostatnim etapem projektu jest kompleksowa ocena techniczna utworzonych podziałów. Proces ten podzielono na dwa kluczowe etapy:
Celem tego rozdziału jest dostarczenie twardych dowodów matematycznych uzasadniających wybór finalnej segmentacji i potwierdzenie poprawności dokonanego podziału.
W celu uniknięcia błędu poznawczego wynikającego z użycia tylko jednej miary, zastosowano podejście wielokryterialne. Do stworzenia rankingu modeli (RFM \(k=4\), PCA \(k=4\), PCA \(k=5\)) wykorzystano trzy wskaźniki jakości:
Zestawienie tych trzech perspektyw pozwala na obiektywny wybór modelu, który balansuje między matematyczną spójnością a złożonością struktury danych.
| Model | Avg_Silhouette | Dunn_Index | Calinski_Harabasz |
|---|---|---|---|
| RFM Benchmark (k=4) | 0.4168 | 0.00038 | 16161.01 |
| PCA Wariant A (k=4) | 0.2853 | 0.00025 | 6513.57 |
| PCA Wariant B (k=5) | 0.3029 | 0.00050 | 6471.06 |
Interpretacja Rankingu Modeli
Analiza zestawionych wskaźników jakości prowadzi do następujących wniosków dotyczących struktury badanych modeli:
1. Pozorna przewaga modelu RFM (k=4): Model referencyjny osiągnął najwyższe wartości wskaźników Calinski-Harabasz oraz Silhouette.
2. Stabilność wariantów PCA (k=4 vs k=5): Porównując modele oparte na redukcji wymiarów, obserwujemy zbliżone parametry jakościowe, z kluczowym wyróżnikiem w postaci Indeksu Dunna.
Decyzja: Mimo że model RFM wygrywa w rankingach ogólnych (ze względu na prostotę), uznano słuszność wykorzystania modelu PCA (k=5). Decyzja ta podyktowana jest wyższym Indeksem Dunna (lepsza separacja trudnych przypadków) oraz wcześniejszymi wynikami testu Duda-Hart, które potwierdziły istnienie unikalnych wzorców behawioralnych, niewidocznych dla modelu 4-klastrowego.
Po przeprowadzeniu segmentacji metodą PCA (\(k=5\)), poddano ją szczegółowej weryfikacji strukturalnej. Celem tego etapu jest potwierdzenie, że wypracowany podział jest stabilny geometrycznie oraz posiada cechy umożliwiające jego praktyczne zastosowanie w strategii marketingowej.
Analiza diagnostyczna została podzielona na trzy kluczowe obszary:
W pierwszej kolejności oceniono separację i gęstość klastrów. Wykorzystano do tego mapę klastrów (rzut na dwie pierwsze składowe główne) oraz wykres sylwetki (Silhouette Plot), który pozwala ocenić jakość dopasowania każdego klienta do danego segmentu.
Interpretacja Wizualizacji: Geometria i Spójność
1. Mapa Klastrów (2D PCA Plot): Rzut wielowymiarowej przestrzeni na płaszczyznę dwóch pierwszych składowych ujawnia faktyczną strukturę bazy klientów.
2. Wykres Sylwetki (Silhouette Plot): Wykres ten weryfikuje poprawność przypisania każdego klienta do jego segmentu poprzez analizę dystansu do klastra macierzystego i sąsiedniego.
Jako uzupełnienie analizy sylwetkowej, zastosowano wykres pasmowy (Stripes Plot). Pozwala on zweryfikować, czy klastry są zwarte wewnątrz, czy też posiadają “rozmyte” jądra.
Analiza Stabilności i Jednorodności (Stripes Plot)
Wykres pasmowy wizualizuje odległość każdego punktu od środka ciężkości (centroidu) swojego klastra, co pozwala ocenić ich wewnętrzną spójność.
Wykres Stripes potwierdził, że klastry są zwarte, ale nie wyjaśnił, dlaczego klienci wewnątrz nich są do siebie podobni. Aby to zrozumieć, przeanalizowano rozkłady kluczowych zmiennych biznesowych wewnątrz każdego segmentu. Poniższe wykresy pudełkowe stanowią dowód na to, że model PCA skutecznie odróżnia grupy na podstawie konkretnych atrybutów.
Wnioski z analizy rozkładów:
Monetary & Frequency (Siła Nabywcza): Wyraźna dominacja Klastra 1 w obu wymiarach potwierdza, że model skutecznie wyizolował elitę zakupową (“Champions”). Pudełka dla tej grupy są położone zdecydowanie najwyżej, co oznacza statystyczną odrębność od reszty bazy. W tej grupie widoczne jest też wiele wartości odstających dla obu tych zmiennych, co potwierdza przypuszczenia, że grupa najlepszych klientów jest najbardziej zróżnicowana.
Recency & Tenure (Aktywność i Staż): Analiza obu zmiennych ujawnia podział na klientów dojrzałych (Klastry 1, 2) oraz nowych (Klastry 3, 5). Zmienne te są też kluczowe w wyłonieniu grupy klientów Utraconych (Klaster 4). Jest to potwierdzenie, że model PCA (k=5) uwzględnił cykl życia klienta jako istotny wymiar podziału, odróżniając nowych użytkowników od stałych bywalców. Trzeba jednakże zwrócić uwagę na długie ogony, dla klastrów nowych klientów (Klastry 3, 5), które mogą oznaczać, że część klientów utraconych została błędnie przypisana jako nowi.
Model_Variety & Avg_Basket_Value (Eksploracja
Oferty): Warto zauważyć, że Klaster 2 wyróżnia
się nie tylko większymi wydatkami, ale też największą różnorodnością
kupowanych produktów (najwyższa mediana Model_Variety i
duża wariancja Avg_Basket_Value).
Podsumowanie diagnostyki wewnętrznej: Zarówno analiza geometryczna (Stripes), jak i analiza atrybutów (Boxplots) potwierdzają, że model PCA (k=5) jest stabilny technicznie i poprawny merytorycznie. Klastry nie są przypadkowymi skupiskami, lecz reprezentują logiczne, wytłumaczalne i odrębne typy zachowań konsumenckich.
Ostatnim elementem walidacji wewnętrznej jest identyfikacja
czynników, które w największym stopniu determinują strukturę klastrów.
Wykorzystując funkcję FeatureImpCluster, oszacowano wpływ
poszczególnych zmiennych na jakość podziału poprzez analizę wzrostu
błędu klasyfikacji (misclassification rate) po ich
usunięciu.
Interpretacja hierarchii czynników
Dominacja Wartości (PC1 - Skala i
Zaangażowanie): Zdecydowanym liderem rankingu jest składowa
PC1, odpowiedzialna za skalę wydatków
(Monetary) i częstotliwość (Frequency).
Oznacza to, że podstawowym kryterium podziału bazy jest wartość
klienta. To właśnie ten wymiar najsilniej separuje “Elitę”
(Champions) od klientów jednorazowych (New
Passive).
Rola Czasu (PC2 - Cykl życia i Staż): Drugim
kluczowym filarem jest PC2, reprezentująca cykl życia
(Tenure, Recency). Jest to dowód na to, że
model skutecznie rozróżnia klientów nie tylko po portfelu, ale i po
stażu. Wymiar ten odpowiada za odseparowanie grupy Lost
(stary staż, brak aktywności) od Fresh Enthusiasts
(krótki staż, mała aktywność).
Niuanse Behawioralne (PC3 i PC5): Choć składowe PC3 (Złożoność koszyka) i PC5 (Wrażliwość na promocje) mają mniejszą wagę globalną, pełnią krytyczną funkcję dostrajającą. Zmienne te są ważnymi wyróżnikami klastrów 2 i 5.
Wniosek końcowy z diagnostyki: Hierarchia ważności zmiennych potwierdza intuicję biznesową: najpierw dzielimy klientów według tego ile wydają (PC1), następnie jak długo są z nami (PC2), a na końcu doprecyzowujemy podział o styl zakupów i promocje (PC3, PC5). Taka struktura modelu gwarantuje, że segmentacja jest logiczna i operacyjna.
Ostatnim etapem weryfikacji jest porównanie segmentacji uzyskanej metodą PCA (\(k=5\)) z referencyjnym modelem RFM (\(k=4\)). Wykorzystano do tego skorygowany indeks Randa (ARI) oraz analizę macierzy pomyłek.
Hipoteza badawcza zakładała, że modele te nie powinny być tożsame (niskie ARI), ponieważ PCA uwzględnia wymiary behawioralne (styl zakupów, wrażliwość na promocje), które wymuszają inną logikę podziału niż same transakcje.
Celem badania było potwierdzenie, że segmentacja oparta na PCA identyfikuje fundamentalnie inne wzorce zachowań niż klasyczna segmentacja RFM. Miarą tej odmienności jest wskaźnik Adjusted Rand Index (ARI).
Procedura weryfikacji przebiegała dwuetapowo:
Jeżeli wskaźnik ARI pozostanie niski również w testach kontrolnych, będzie to niepodważalny dowód na to, że modele te klastrują klientów według zupełnie innych kryteriów.
# Model RFM rozszerzony do k=5 - do porównania
km.rfm.forced5 <- eclust(df_rfm_scaled, "kmeans", k = 5, graph = FALSE, verbose = FALSE)
# --- OBLICZENIA ARI ---
# Scenariusz A: Optymalny (RFM 4 vs PCA 5)
ari_opt <- adjustedRandIndex(rfm_kmeans$cluster, pca_k5$cluster)
# Scenariusz B: Kontrola k=4 (RFM 4 vs PCA 4)
ari_k4 <- adjustedRandIndex(rfm_kmeans$cluster, pca_k4$cluster)
# Scenariusz C: Kontrola k=5 (RFM 5 vs PCA 5)
ari_k5 <- adjustedRandIndex(km.rfm.forced5$cluster, pca_k5$cluster)
# --- PREZENTACJA WYNIKÓW ---
results_ari <- data.frame(
Scenariusz = c("1. Optymalny (RFM k=4 vs PCA k=5)",
"2. Kontrola (RFM k=4 vs PCA k=4)",
"3. Kontrola (RFM k=5 vs PCA k=5)"),
ARI_Score = round(c(ari_opt, ari_k4, ari_k5), 3)
)
print(results_ari)
## Scenariusz ARI_Score
## 1 1. Optymalny (RFM k=4 vs PCA k=5) 0.268
## 2 2. Kontrola (RFM k=4 vs PCA k=4) 0.236
## 3 3. Kontrola (RFM k=5 vs PCA k=5) 0.337
Wynik liczbowy: Uzyskane wyniki są spójnie niskie (średnie \(ARI \approx 0.28\)) we wszystkich badanych scenariuszach.
Interpretacja statystyczna: Wynik ten mieści się w przedziale niskiej zgodności. Oznacza to, że podział wygenerowany przez PCA jest istotnie różny od podziału RFM, niezależnie od liczby klastrów. Nie jest to jednak wynik losowy (bliski 0), co sugeruje, że oba modele wyłapują pewne fundamentalne struktury, ale różnią się w klasyfikacji większości bazy. Jest to dowód potwierdzający zasadność użycia PCA – model ten wnosi nową informację, której brakuje w RFM.
Wskaźnik ARI potwierdził, że modele są różne, ale nie wyjaśnił na czym polegają różnice. Do tego celu wykorzystano Macierz Przepływów, która ujawnia, w których obszarach modele są zgodne, a gdzie PCA wprowadza nową, krytyczną dla biznesu granulację. Macierz ta stanowi dowód na to, że niska wartość ARI nie wynika z błędu, lecz z precyzyjniejszego “widzenia” klientów przez model PCA.
Szczegółowa dekompozycja grup RFM na segmenty PCA:
1. Stabilność Elity (Wiersz RFM 4): * Obserwacja: Grupa najlepszych klientów wg RFM (4) wykazuje bardzo wysoką zgodność z modelem PCA. Aż 2133 klientów trafiło do grupy Champions (PCA 1). * Wniosek: W przypadku klientów o ekstremalnie wysokich parametrach finansowych, oba modele działają identycznie. PCA potwierdza status VIP-ów zidentyfikowanych przez RFM, co uwiarygadnia poprawność techniczną obu metod.
2. Pułapka “Średniego Klienta” (Wiersz RFM 2): * Obserwacja: Grupa, którą RFM klasyfikował jednolicie jako “Solidni/Lojalni” (RFM 2), została przez PCA rozproszona po wszystkich 5 segmentach. Jest to najbardziej niejednorodna grupa w starym modelu. * Wniosek: RFM wrzuca do jednego worka klientów o zupełnie różnych motywacjach zakupowych, a model PCA skutecznie demaskuje tę różnorodność.
3. Dywersyfikacja “Obiecujących Nowych” (Wiersz RFM 3): * Obserwacja: Grupa RFM 3, zazwyczaj interpretowana jako “Nowi z potencjałem”, w rzeczywistości składa się z trzech radykalnie różnych typów klientów, co ujawniło PCA: * New Passive (PCA 5 - 2097 os.): Dominująca podgrupa. Kupili raz i są bierni – wymagają aktywizacji. * Occasional Big Spenders (PCA 2 - 530 os.): Klienci, którzy na start zrobili zakupy o bardzo wysokiej wartości (jakościowi). * Fresh Enthusiasts (PCA 3 - 453 os.): Klienci, którzy wpadli w wir zakupów (wysoka częstotliwość w krótkim czasie). * Wniosek: Traktowanie grupy RFM 3 jedną miarą jest błędem marketingowym. PCA pozwala od razu rozdzielić te grupy i dostosować strategię do ich profilów.
4. Rozróżnienie Źródła Nieaktywności (Wiersz RFM 1): * Obserwacja: Najsłabsza grupa RFM 1 została precyzyjnie podzielona na dwie części: * Lost (PCA 4 - 3932 os.): Klienci rzeczywiście utraceni (stare zakupy). * New Passive (PCA 5 - 3152 os.): Nowi klienci o niskiej wartości (świeże zakupy). * Wniosek: RFM nie odróżnia braku aktywności wynikającego z odejścia od braku aktywności wynikającego z bycia nowym.
Podsumowanie Walidacji: Uzyskany wynik ARI (\(0.27\)) oraz analiza przepływów potwierdzają hipotezę badawczą. Model PCA wnosi istotną wartość dodaną, dekomponując niejednorodne grupy “średnie” i “nowe” (RFM 2 i 3) na precyzyjne profile behawioralne, przy jednoczesnym zachowaniu spójności w ocenie klientów kluczowych (RFM 4).
Celem badania było porównanie skuteczności klasycznej segmentacji transakcyjnej (RFM, \(k=4\)) z podejściem wielowymiarowym opartym na redukcji wymiarów (PCA, \(k=5\)). Analizę przeprowadzono na zbiorze danych e-commerce (18576 Klientów), uwzględniając w modelu PCA – poza metrykami finansowymi – zmienne behawioralne (m.in. styl, użycie kodów rabatowych, staż).
Główna hipoteza badawcza została potwierdzona. Uzyskany wynik Adjusted Rand Index (ARI) = 0.268 jednoznacznie wskazuje, że model PCA zidentyfikował w danych struktury i wzorce zachowań, które pozostawały nieuchwytne dla prostego modelu RFM. Niska zgodność między modelami dowodzi, że włączenie zmiennych opisujących cykl życia oraz jakość koszyka fundamentalnie zmienia geometrię przestrzeni klastrów.
Porównanie profili klastrów oraz analiza macierzy pomyłek wykazały przewagę modelu PCA w trzech krytycznych obszarach, w których model RFM wykazał tendencję do nadmiernego upraszczania:
Tenure.Konkluzja: Projekt udowodnił, że segmentacja behawioralna oparta na PCA jest narzędziem o znacznie wyższej precyzji analitycznej niż RFM, pozwalającym na przejście od prostego podziału ilościowego do jakościowego zrozumienia bazy klientów.