Dataset yaang digunakan untuk analisis pada project ini yaitu Customer Personality Analysis, bersumber dari platform Kaggle dan diunggah oleh Imakash3011. Dataset dapat diakses secara publik pada tautan:
https://www.kaggle.com/datasets/imakash3011/customer-personality-analysis
Dataset ini merupakan data pelanggan sebuah perusahaan ritel yang berisi informasi demografis, perilaku pembelian, serta respons terhadap program promosi.
| Atribut | Keterangan |
|---|---|
| Nama Dataset | Customer Personality Analysis |
| Sumber | Kaggle (imakash3011) |
| Jumlah Observasi | 2.240 baris |
| Jumlah Variabel | 29 kolom |
Dataset Customer Personality Analysis dipilih karena memenuhi kriteria analisis multivariat lanjutan, khususnya Principal Component Analysis (PCA) dan feature selection. Tujuan analisis secara spesifik:
## tibble [2,240 × 29] (S3: tbl_df/tbl/data.frame)
## $ ID : num [1:2240] 5524 2174 4141 6182 5324 ...
## $ Year_Birth : num [1:2240] 1957 1954 1965 1984 1981 ...
## $ Education : chr [1:2240] "Graduation" "Graduation" "Graduation" "Graduation" ...
## $ Marital_Status : chr [1:2240] "Single" "Single" "Together" "Together" ...
## $ Income : num [1:2240] 58138 46344 71613 26646 58293 ...
## $ Kidhome : num [1:2240] 0 1 0 1 1 0 0 1 1 1 ...
## $ Teenhome : num [1:2240] 0 1 0 0 0 1 1 0 0 1 ...
## $ Dt_Customer : chr [1:2240] "2012-04-09" "2014-08-03" "2013-08-21" "2014-10-02" ...
## $ Recency : num [1:2240] 58 38 26 26 94 16 34 32 19 68 ...
## $ MntWines : num [1:2240] 635 11 426 11 173 520 235 76 14 28 ...
## $ MntFruits : num [1:2240] 88 1 49 4 43 42 65 10 0 0 ...
## $ MntMeatProducts : num [1:2240] 546 6 127 20 118 98 164 56 24 6 ...
## $ MntFishProducts : num [1:2240] 172 2 111 10 46 0 50 3 3 1 ...
## $ MntSweetProducts : num [1:2240] 88 1 21 3 27 42 49 1 3 1 ...
## $ MntGoldProds : num [1:2240] 88 6 42 5 15 14 27 23 2 13 ...
## $ NumDealsPurchases : num [1:2240] 3 2 1 2 5 2 4 2 1 1 ...
## $ NumWebPurchases : num [1:2240] 8 1 8 2 5 6 7 4 3 1 ...
## $ NumCatalogPurchases: num [1:2240] 10 1 2 0 3 4 3 0 0 0 ...
## $ NumStorePurchases : num [1:2240] 4 2 10 4 6 10 7 4 2 0 ...
## $ NumWebVisitsMonth : num [1:2240] 7 5 4 6 5 6 6 8 9 20 ...
## $ AcceptedCmp3 : num [1:2240] 0 0 0 0 0 0 0 0 0 1 ...
## $ AcceptedCmp4 : num [1:2240] 0 0 0 0 0 0 0 0 0 0 ...
## $ AcceptedCmp5 : num [1:2240] 0 0 0 0 0 0 0 0 0 0 ...
## $ AcceptedCmp1 : num [1:2240] 0 0 0 0 0 0 0 0 0 0 ...
## $ AcceptedCmp2 : num [1:2240] 0 0 0 0 0 0 0 0 0 0 ...
## $ Complain : num [1:2240] 0 0 0 0 0 0 0 0 0 0 ...
## $ Z_CostContact : num [1:2240] 3 3 3 3 3 3 3 3 3 3 ...
## $ Z_Revenue : num [1:2240] 11 11 11 11 11 11 11 11 11 11 ...
## $ Response : num [1:2240] 1 0 0 0 0 0 0 0 1 0 ...
## Dimensi: 2240 baris x 29 kolom
## [1] "ID" "Year_Birth" "Education"
## [4] "Marital_Status" "Income" "Kidhome"
## [7] "Teenhome" "Dt_Customer" "Recency"
## [10] "MntWines" "MntFruits" "MntMeatProducts"
## [13] "MntFishProducts" "MntSweetProducts" "MntGoldProds"
## [16] "NumDealsPurchases" "NumWebPurchases" "NumCatalogPurchases"
## [19] "NumStorePurchases" "NumWebVisitsMonth" "AcceptedCmp3"
## [22] "AcceptedCmp4" "AcceptedCmp5" "AcceptedCmp1"
## [25] "AcceptedCmp2" "Complain" "Z_CostContact"
## [28] "Z_Revenue" "Response"
## ID Year_Birth Education Marital_Status
## "numeric" "numeric" "character" "character"
## Income Kidhome Teenhome Dt_Customer
## "numeric" "numeric" "numeric" "character"
## Recency MntWines MntFruits MntMeatProducts
## "numeric" "numeric" "numeric" "numeric"
## MntFishProducts MntSweetProducts MntGoldProds NumDealsPurchases
## "numeric" "numeric" "numeric" "numeric"
## NumWebPurchases NumCatalogPurchases NumStorePurchases NumWebVisitsMonth
## "numeric" "numeric" "numeric" "numeric"
## AcceptedCmp3 AcceptedCmp4 AcceptedCmp5 AcceptedCmp1
## "numeric" "numeric" "numeric" "numeric"
## AcceptedCmp2 Complain Z_CostContact Z_Revenue
## "numeric" "numeric" "numeric" "numeric"
## Response
## "numeric"
## [1] "character"
## [1] "2012-04-09" "2014-08-03" "2013-08-21" "2014-10-02" "2014-01-19"
## [6] "2013-09-09"
## [1] "Date"
# MISSING VALUES
missing_summary <- data.frame(
Variabel = names(df),
Missing_n = colSums(is.na(df))
) %>% filter(Missing_n > 0)
print(missing_summary)## Variabel Missing_n
## Income Income 24
# Imputasi Income dengan median
df$Income[is.na(df$Income)] <- median(df$Income, na.rm = TRUE)
cat("Missing setelah imputasi:", sum(is.na(df)), "\n")## Missing setelah imputasi: 0
Dari 29 variabel, hanya variabel Income yang memiliki nilai hilang, sebanyak 24 baris. Penanganan dilakukan dengan imputasi median dari variabel Income. Dibandingkan rata-rata (mean), median lebih robust terhadap keberadaan outlier karena nilainya ditentukan oleh posisi data di tengah distribusi, bukan oleh besar kecilnya seluruh nilai observasi. Oleh karena itu, penggunaan median dapat mempertahankan kecenderungan pusat data tanpa terpengaruh secara berlebihan oleh beberapa pelanggan dengan pendapatan yang sangat tinggi atau sangat rendah.
## [1] "Single" "Together" "Married" "Divorced" "Widow" "Alone" "Absurd"
## [8] "YOLO"
##
## Absurd Alone Divorced Married Single Together Widow YOLO
## 2 3 232 864 480 580 77 2
Kolom Marital_Status ditemukan memiliki beberapa nilai yang tidak valid sebagai kategori status pernikahan, yaitu Alone, Absurd, dan YOLO. Nilai-nilai ini kemungkinan berasal dari kesalahan input saat pengumpulan data. Karena tidak dapat dikategorikan secara pasti, ketiganya digabungkan ke dalam kategori Single sebagai nilai yang paling netral.
df <- df %>%
mutate(Marital_Status = case_when(
Marital_Status %in% c("Alone", "Absurd", "YOLO") ~ "Single",
TRUE ~ Marital_Status
))
table(df$Marital_Status)##
## Divorced Married Single Together Widow
## 232 864 487 580 77
##
## 3
## 2240
##
## 11
## 2240
Variabel Z_CostContact dan Z_Revenue dihapus karena bersifat konstanta (semua nilai = 3 dan 11 berturut-turut), sehingga tidak memberikan informasi analitik.
##
## 1893 1899 1900 1940 1941 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953
## 1 1 1 1 1 7 7 8 16 16 21 30 29 43 52 35
## 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969
## 50 49 55 43 53 51 49 36 44 45 42 74 50 44 51 71
## 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985
## 77 87 79 74 69 83 89 52 77 53 39 39 45 42 38 32
## 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996
## 42 27 29 30 18 15 13 5 3 5 2
## [1] 1730 666666
## [1] 51381.5
## # A tibble: 1 × 27
## ID Year_Birth Education Marital_Status Income Kidhome Teenhome Dt_Customer
## <dbl> <dbl> <chr> <chr> <dbl> <dbl> <dbl> <date>
## 1 9432 1977 Graduation Together 666666 1 0 2013-02-06
## # ℹ 19 more variables: Recency <dbl>, MntWines <dbl>, MntFruits <dbl>,
## # MntMeatProducts <dbl>, MntFishProducts <dbl>, MntSweetProducts <dbl>,
## # MntGoldProds <dbl>, NumDealsPurchases <dbl>, NumWebPurchases <dbl>,
## # NumCatalogPurchases <dbl>, NumStorePurchases <dbl>,
## # NumWebVisitsMonth <dbl>, AcceptedCmp3 <dbl>, AcceptedCmp4 <dbl>,
## # AcceptedCmp5 <dbl>, AcceptedCmp1 <dbl>, AcceptedCmp2 <dbl>, Complain <dbl>,
## # Response <dbl>
## 90% 95% 99% 100%
## 79776.60 83957.00 94440.32 666666.00
# Batas persentil ke-99
income_q99 <- quantile(df$Income, 0.99, na.rm = TRUE)
# Ganti nilai ekstrem dengan median
df$Income[df$Income > income_q99] <-
median(df$Income, na.rm = TRUE)terdapat 1 data dengan nilai income sebesar 666.666. Nilai ini 13 kali lebih besar dibandingkan median pendapatan pelanggan (51.381), menunjukkan adanya observasi yang sangat berbeda dari pola umum data. Kemudian data diimputasi dengan nilai median dari variabel Income.
## Dimensi final: 2237 baris x 27 kolom
## Total missing: 0
## ID Year_Birth Education Marital_Status
## "numeric" "numeric" "character" "character"
## Income Kidhome Teenhome Dt_Customer
## "numeric" "numeric" "numeric" "Date"
## Recency MntWines MntFruits MntMeatProducts
## "numeric" "numeric" "numeric" "numeric"
## MntFishProducts MntSweetProducts MntGoldProds NumDealsPurchases
## "numeric" "numeric" "numeric" "numeric"
## NumWebPurchases NumCatalogPurchases NumStorePurchases NumWebVisitsMonth
## "numeric" "numeric" "numeric" "numeric"
## AcceptedCmp3 AcceptedCmp4 AcceptedCmp5 AcceptedCmp1
## "numeric" "numeric" "numeric" "numeric"
## AcceptedCmp2 Complain Response
## "numeric" "numeric" "numeric"
write_xlsx(df, "C:/Users/riefa/OneDrive - untirta.ac.id/Documents/Riefan Abdul Hakim/Kuliah/Mata Kuliah/Semester 4/Eksplorasi & Visualisasi Data/Tugas Projek/marketing_clean.xlsx")
cat("Dataset bersih disimpan: marketing_clean.xlsx\n")## Dataset bersih disimpan: marketing_clean.xlsx
dfc <- read_excel("C:/Users/riefa/OneDrive - untirta.ac.id/Documents/Riefan Abdul Hakim/Kuliah/Mata Kuliah/Semester 4/Eksplorasi & Visualisasi Data/Tugas Projek/marketing_clean.xlsx")
num_data <- dfc[, sapply(dfc, is.numeric)]
desc_stats <- data.frame(
Variabel = names(num_data),
N = sapply(num_data, function(x) sum(!is.na(x))),
Mean = sapply(num_data, mean, na.rm = TRUE),
SD = sapply(num_data, sd, na.rm = TRUE),
Min = sapply(num_data, min, na.rm = TRUE),
Median = sapply(num_data, median, na.rm = TRUE),
Max = sapply(num_data, max, na.rm = TRUE)
)
print(desc_stats, row.names = FALSE)## Variabel N Mean SD Min Median Max
## ID 2237 5.590726e+03 3.245119e+03 0 5455.0 11191
## Year_Birth 2237 1.968902e+03 1.170192e+01 1940 1970.0 1996
## Income 2237 5.129777e+04 2.018427e+04 1730 51381.5 94384
## Kidhome 2237 4.443451e-01 5.384671e-01 0 0.0 2
## Teenhome 2237 5.064819e-01 5.445929e-01 0 0.0 2
## Recency 2237 4.910460e+01 2.895607e+01 0 49.0 99
## MntWines 2237 3.039955e+02 3.365744e+02 0 174.0 1493
## MntFruits 2237 2.627045e+01 3.971597e+01 0 8.0 199
## MntMeatProducts 2237 1.669169e+02 2.256612e+02 0 67.0 1725
## MntFishProducts 2237 3.752302e+01 5.463991e+01 0 12.0 259
## MntSweetProducts 2237 2.706884e+01 4.129395e+01 0 8.0 263
## MntGoldProds 2237 4.396871e+01 5.205432e+01 0 24.0 362
## NumDealsPurchases 2237 2.326777e+00 1.932923e+00 0 2.0 15
## NumWebPurchases 2237 4.087170e+00 2.779461e+00 0 4.0 27
## NumCatalogPurchases 2237 2.662494e+00 2.923456e+00 0 2.0 28
## NumStorePurchases 2237 5.794367e+00 3.250940e+00 0 5.0 13
## NumWebVisitsMonth 2237 5.319177e+00 2.426386e+00 0 6.0 20
## AcceptedCmp3 2237 7.286544e-02 2.599736e-01 0 0.0 1
## AcceptedCmp4 2237 7.465355e-02 2.628903e-01 0 0.0 1
## AcceptedCmp5 2237 7.241842e-02 2.592374e-01 0 0.0 1
## AcceptedCmp1 2237 6.437193e-02 2.454692e-01 0 0.0 1
## AcceptedCmp2 2237 1.341082e-02 1.150517e-01 0 0.0 1
## Complain 2237 8.940545e-03 9.415187e-02 0 0.0 1
## Response 2237 1.493071e-01 3.564706e-01 0 0.0 1
Berdasarkan hasil statistik deskriptif, dataset setelah melalui proses data cleaning terdiri dari 2.237 observasi. Variabel Income memiliki rata-rata sebesar 51.297,77 dengan median sebesar 51.381,50. Nilai rata-rata yang dekat dengan median menunjukkan distribusi pendapatan seimbang setelah dilakukan penanganan nilai ekstrem. Dengan endapatan terkecil sebesar 1.730 dan terbesar 94.384.
Dari data Year_Birth, tahun kelahiran pelanggan antara 1940 sampai 1996 dengan rata-rata tahun kelahiran 1968,90. Ini menunjukkan bahwa sebagian besar pelanggan berada pada kelompok usia dewasa hingga lanjut usia.
Variabel Recency memiliki rata-rata 49,10 hari dengan median 49 hari. Nilai minimum sebesar 0 dan maksimum sebesar 99 menunjukkan bahwa terdapat pelanggan yang baru saja melakukan transaksi maupun pelanggan yang sudah cukup lama tidak melakukan transaksi.
Dari sisi pengeluaran produk, rata-rata pengeluaran terbesar terdapat pada kategori anggur (MntWines) sebesar 303,99, diikuti produk daging (MntMeatProducts) sebesar 166,92. Sebaliknya, pengeluaran untuk buah, ikan, dan produk manis relatif lebih rendah. Perbedaan yang cukup besar antara nilai maksimum dan median pada sebagian besar kategori pengeluaran menunjukkan adanya variasi perilaku belanja yang tinggi antar pelanggan.
Berdasarkan aktivitas pembelian, rata-rata jumlah pembelian di toko fisik (NumStorePurchases) sebesar 5,79 kali, lebih tinggi dibandingkan pembelian melalui web (4,09 kali) maupun katalog (2,66 kali). Hal ini mengindikasikan bahwa toko fisik masih menjadi saluran pembelian yang paling sering digunakan oleh pelanggan dalam dataset ini. Selain itu, pelanggan rata-rata mengunjungi situs web perusahaan sebanyak 5,32 kali per bulan.
Variabel kampanye pemasaran menunjukkan tingkat keberhasilan yang relatif rendah. Hal ini terlihat dari nilai rata-rata AcceptedCmp1 hingga AcceptedCmp5 yang seluruhnya berada di bawah 0,10. Variabel Response memiliki rata-rata sebesar 0,149, yang berarti hanya sekitar 14,9% pelanggan yang merespons kampanye pemasaran terakhir. Dengan kata lain, sebagian besar pelanggan tidak memberikan respons terhadap kampanye yang dilakukan perusahaan.
Variabel Complain memiliki rata-rata sebesar 0,009 atau kurang dari 1%, menunjukkan bahwa jumlah pelanggan yang pernah mengajukan keluhan sangat sedikit. Temuan ini mengindikasikan bahwa secara umum tingkat keluhan pelanggan dalam dataset relatif rendah.
# Ambil variabel numerik
df_num <- dfc %>%
select(where(is.numeric))
# Ubah ke format long
df_long <- df_num %>%
pivot_longer(
cols = everything(),
names_to = "Variabel",
values_to = "Nilai"
)
# Histogram
ggplot(df_long, aes(x = Nilai)) +
geom_histogram(
bins = 30,
fill = "#4A90D9",
color = "white"
) +
facet_wrap(
~ Variabel,
scales = "free",
ncol = 5
) +
labs(
title = "Distribusi Variabel Numerik",
x = NULL,
y = "Frekuensi"
) +
theme_minimal()# Ambil variabel numerik
df_num <- dfc %>%
select(where(is.numeric))
# Ubah ke format long
df_long <- df_num %>%
pivot_longer(
cols = everything(),
names_to = "Variabel",
values_to = "Nilai"
)
# Boxplot
ggplot(df_long, aes(y = Nilai)) +
geom_boxplot(
fill = "#4A90D9",
color = "#2E4057",
outlier.color = "red",
outlier.alpha = 0.5
) +
facet_wrap(
~ Variabel,
scales = "free_y",
ncol = 5
) +
labs(
title = "Boxplot Variabel Numerik",
x = NULL,
y = "Nilai"
) +
theme_minimal() +
theme(
axis.text.x = element_blank()
)# Matriks korelasi
cor_matrix <- cor(df_num, use = "complete.obs", method = "pearson")
print(cor_matrix)## ID Year_Birth Income Kidhome
## ID 1.0000000000 0.003024161 0.0009052512 0.002201838
## Year_Birth 0.0030241607 1.000000000 -0.2181727637 0.234132783
## Income 0.0009052512 -0.218172764 1.0000000000 -0.523409050
## Kidhome 0.0022018379 0.234132783 -0.5234090501 1.000000000
## Teenhome -0.0035428661 -0.363350310 0.0524568046 -0.035752826
## Recency -0.0467548189 -0.019670022 0.0122524663 0.007544380
## MntWines -0.0211805067 -0.163035413 0.7227774047 -0.496366852
## MntFruits 0.0070804983 -0.013750644 0.5337791189 -0.372488087
## MntMeatProducts -0.0026222825 -0.030926622 0.6654626799 -0.437058776
## MntFishProducts -0.0231808695 -0.042519264 0.5427271501 -0.387536072
## MntSweetProducts -0.0064443157 -0.019570864 0.5291661775 -0.370655940
## MntGoldProds -0.0106605522 -0.057598645 0.4105072777 -0.349632733
## NumDealsPurchases -0.0369168760 -0.067998998 -0.1152437955 0.221798582
## NumWebPurchases -0.0179125125 -0.153972860 0.4793836514 -0.362063466
## NumCatalogPurchases -0.0018925116 -0.125438543 0.6685293276 -0.502437887
## NumStorePurchases -0.0140617453 -0.139465104 0.6815592344 -0.500387193
## NumWebVisitsMonth -0.0081042359 0.117569791 -0.6332144270 0.447641013
## AcceptedCmp3 -0.0359593612 0.061012918 -0.0107287228 0.014605689
## AcceptedCmp4 -0.0252917122 -0.064340545 0.2080649403 -0.161775327
## AcceptedCmp5 -0.0050624314 0.015322267 0.3793280033 -0.204994475
## AcceptedCmp1 -0.0215241312 -0.008226631 0.3187538077 -0.172512450
## AcceptedCmp2 -0.0150268590 -0.007656707 0.1042657003 -0.081793654
## Complain 0.0315197473 -0.004478566 -0.0264769217 0.036283499
## Response -0.0218104984 0.018424293 0.1549848479 -0.080176293
## Teenhome Recency MntWines MntFruits
## ID -0.003542866 -0.0467548189 -0.021180507 0.007080498
## Year_Birth -0.363350310 -0.0196700216 -0.163035413 -0.013750644
## Income 0.052456805 0.0122524663 0.722777405 0.533779119
## Kidhome -0.035752826 0.0075443797 -0.496366852 -0.372488087
## Teenhome 1.000000000 0.0171151926 0.005409456 -0.175950738
## Recency 0.017115193 1.0000000000 0.016668404 -0.003591871
## MntWines 0.005409456 0.0166684044 1.000000000 0.388517935
## MntFruits -0.175950738 -0.0035918708 0.388517935 1.000000000
## MntMeatProducts -0.260820456 0.0237054109 0.561993458 0.542056997
## MntFishProducts -0.203899789 0.0015319579 0.399072954 0.594438329
## MntSweetProducts -0.162218429 0.0230448403 0.385991906 0.567054131
## MntGoldProds -0.020186242 0.0174116157 0.386375609 0.390042200
## NumDealsPurchases 0.387792189 -0.0009865534 0.010829370 -0.131886360
## NumWebPurchases 0.155776071 -0.0106157768 0.542177275 0.297023558
## NumCatalogPurchases -0.110285099 0.0254487538 0.634783526 0.487306599
## NumStorePurchases 0.050516998 0.0011170318 0.642433298 0.463168272
## NumWebVisitsMonth 0.134491123 -0.0219587942 -0.320336689 -0.417427179
## AcceptedCmp3 -0.042822903 -0.0329755281 0.062201198 0.014983211
## AcceptedCmp4 0.038789726 0.0188902177 0.373531584 0.010401574
## AcceptedCmp5 -0.190226963 0.0009564815 0.471969014 0.212026809
## AcceptedCmp1 -0.140287598 -0.0192576125 0.354364615 0.195379632
## AcceptedCmp2 -0.015663557 -0.0017637184 0.206040386 -0.009700701
## Complain 0.007591494 0.0053983360 -0.035930341 -0.002799739
## Response -0.154730249 -0.1985677750 0.247391836 0.125904289
## MntMeatProducts MntFishProducts MntSweetProducts
## ID -0.002622283 -0.0231808695 -0.006444316
## Year_Birth -0.030926622 -0.0425192644 -0.019570864
## Income 0.665462680 0.5427271501 0.529166177
## Kidhome -0.437058776 -0.3875360717 -0.370655940
## Teenhome -0.260820456 -0.2038997888 -0.162218429
## Recency 0.023705411 0.0015319579 0.023044840
## MntWines 0.561993458 0.3990729545 0.385991906
## MntFruits 0.542056997 0.5944383291 0.567054131
## MntMeatProducts 1.000000000 0.5678797895 0.523417578
## MntFishProducts 0.567879789 1.0000000000 0.579552863
## MntSweetProducts 0.523417578 0.5795528627 1.000000000
## MntGoldProds 0.348845048 0.4221032254 0.369193155
## NumDealsPurchases -0.122464723 -0.1394397189 -0.120277624
## NumWebPurchases 0.293578739 0.2934888806 0.348303917
## NumCatalogPurchases 0.723518536 0.5340325953 0.490497095
## NumStorePurchases 0.480110308 0.4600991947 0.448801399
## NumWebVisitsMonth -0.539203437 -0.4457596325 -0.423249416
## AcceptedCmp3 0.018330590 0.0003698553 0.001490518
## AcceptedCmp4 0.103053264 0.0168642388 0.028611565
## AcceptedCmp5 0.372212478 0.1981628379 0.258848015
## AcceptedCmp1 0.310095747 0.2609084325 0.241874850
## AcceptedCmp2 0.043090152 0.0025831149 0.009972115
## Complain -0.020719834 -0.0188177550 -0.020403739
## Response 0.236639779 0.1114148536 0.117366325
## MntGoldProds NumDealsPurchases NumWebPurchases
## ID -0.01066055 -0.0369168760 -0.01791251
## Year_Birth -0.05759864 -0.0679989983 -0.15397286
## Income 0.41050728 -0.1152437955 0.47938365
## Kidhome -0.34963273 0.2217985817 -0.36206347
## Teenhome -0.02018624 0.3877921888 0.15577607
## Recency 0.01741162 -0.0009865534 -0.01061578
## MntWines 0.38637561 0.0108293698 0.54217728
## MntFruits 0.39004220 -0.1318863601 0.29702356
## MntMeatProducts 0.34884505 -0.1224647231 0.29357874
## MntFishProducts 0.42210323 -0.1394397189 0.29348888
## MntSweetProducts 0.36919316 -0.1202776241 0.34830392
## MntGoldProds 1.00000000 0.0499417443 0.42273084
## NumDealsPurchases 0.04994174 1.0000000000 0.23377237
## NumWebPurchases 0.42273084 0.2337723714 1.00000000
## NumCatalogPurchases 0.43699676 -0.0087282518 0.37810816
## NumStorePurchases 0.38326419 0.0680623174 0.50227710
## NumWebVisitsMonth -0.24909286 0.3472607618 -0.05625050
## AcceptedCmp3 0.12373417 -0.0233752227 0.04195772
## AcceptedCmp4 0.02262271 0.0153388537 0.15573379
## AcceptedCmp5 0.17638202 -0.1829102847 0.13895756
## AcceptedCmp1 0.16714519 -0.1235301945 0.15499059
## AcceptedCmp2 0.05025208 -0.0378142025 0.03410323
## Complain -0.02987355 0.0035988400 -0.01323338
## Response 0.14069252 0.0018540640 0.14845270
## NumCatalogPurchases NumStorePurchases NumWebVisitsMonth
## ID -0.001892512 -0.014061745 -0.008104236
## Year_Birth -0.125438543 -0.139465104 0.117569791
## Income 0.668529328 0.681559234 -0.633214427
## Kidhome -0.502437887 -0.500387193 0.447641013
## Teenhome -0.110285099 0.050516998 0.134491123
## Recency 0.025448754 0.001117032 -0.021958794
## MntWines 0.634783526 0.642433298 -0.320336689
## MntFruits 0.487306599 0.463168272 -0.417427179
## MntMeatProducts 0.723518536 0.480110308 -0.539203437
## MntFishProducts 0.534032595 0.460099195 -0.445759633
## MntSweetProducts 0.490497095 0.448801399 -0.423249416
## MntGoldProds 0.436996761 0.383264186 -0.249092859
## NumDealsPurchases -0.008728252 0.068062317 0.347260762
## NumWebPurchases 0.378108157 0.502277101 -0.056250497
## NumCatalogPurchases 1.000000000 0.518883896 -0.520400179
## NumStorePurchases 0.518883896 1.000000000 -0.429886178
## NumWebVisitsMonth -0.520400179 -0.429886178 1.000000000
## AcceptedCmp3 0.104750260 -0.067987949 0.060954617
## AcceptedCmp4 0.139288404 0.179144396 -0.032463819
## AcceptedCmp5 0.321419464 0.216147061 -0.276371216
## AcceptedCmp1 0.308240375 0.183043051 -0.192947688
## AcceptedCmp2 0.099890509 0.085097560 -0.007329888
## Complain -0.018278937 -0.011524482 0.020783505
## Response 0.220894435 0.038854761 -0.004449482
## AcceptedCmp3 AcceptedCmp4 AcceptedCmp5 AcceptedCmp1
## ID -0.0359593612 -0.02529171 -0.0050624314 -0.021524131
## Year_Birth 0.0610129183 -0.06434054 0.0153222665 -0.008226631
## Income -0.0107287228 0.20806494 0.3793280033 0.318753808
## Kidhome 0.0146056891 -0.16177533 -0.2049944753 -0.172512450
## Teenhome -0.0428229029 0.03878973 -0.1902269633 -0.140287598
## Recency -0.0329755281 0.01889022 0.0009564815 -0.019257612
## MntWines 0.0622011983 0.37353158 0.4719690139 0.354364615
## MntFruits 0.0149832106 0.01040157 0.2120268088 0.195379632
## MntMeatProducts 0.0183305903 0.10305326 0.3722124779 0.310095747
## MntFishProducts 0.0003698553 0.01686424 0.1981628379 0.260908433
## MntSweetProducts 0.0014905183 0.02861156 0.2588480148 0.241874850
## MntGoldProds 0.1237341743 0.02262271 0.1763820160 0.167145186
## NumDealsPurchases -0.0233752227 0.01533885 -0.1829102847 -0.123530195
## NumWebPurchases 0.0419577219 0.15573379 0.1389575554 0.154990590
## NumCatalogPurchases 0.1047502599 0.13928840 0.3214194636 0.308240375
## NumStorePurchases -0.0679879490 0.17914440 0.2161470607 0.183043051
## NumWebVisitsMonth 0.0609546169 -0.03246382 -0.2763712165 -0.192947688
## AcceptedCmp3 1.0000000000 -0.07962739 0.0809303593 0.094661402
## AcceptedCmp4 -0.0796273915 1.00000000 0.3078120150 0.251225308
## AcceptedCmp5 0.0809303593 0.30781201 1.0000000000 0.404615933
## AcceptedCmp1 0.0946614022 0.25122531 0.4046159334 1.000000000
## AcceptedCmp2 0.0719805904 0.29218396 0.2223330504 0.175283294
## Complain 0.0099156837 -0.02697772 -0.0082155479 -0.024913158
## Response 0.2541442515 0.17688960 0.3281821410 0.293882451
## AcceptedCmp2 Complain Response
## ID -0.015026859 0.0315197473 -0.0218104984
## Year_Birth -0.007656707 -0.0044785661 0.0184242926
## Income 0.104265700 -0.0264769217 0.1549848479
## Kidhome -0.081793654 0.0362834990 -0.0801762927
## Teenhome -0.015663557 0.0075914941 -0.1547302490
## Recency -0.001763718 0.0053983360 -0.1985677750
## MntWines 0.206040386 -0.0359303410 0.2473918364
## MntFruits -0.009700701 -0.0027997385 0.1259042889
## MntMeatProducts 0.043090152 -0.0207198340 0.2366397794
## MntFishProducts 0.002583115 -0.0188177550 0.1114148536
## MntSweetProducts 0.009972115 -0.0204037386 0.1173663251
## MntGoldProds 0.050252085 -0.0298735539 0.1406925150
## NumDealsPurchases -0.037814203 0.0035988400 0.0018540640
## NumWebPurchases 0.034103231 -0.0132333780 0.1484527002
## NumCatalogPurchases 0.099890509 -0.0182789367 0.2208944353
## NumStorePurchases 0.085097560 -0.0115244817 0.0388547607
## NumWebVisitsMonth -0.007329888 0.0207835047 -0.0044494815
## AcceptedCmp3 0.071980590 0.0099156837 0.2541442515
## AcceptedCmp4 0.292183958 -0.0269777182 0.1768896029
## AcceptedCmp5 0.222333050 -0.0082155479 0.3281821410
## AcceptedCmp1 0.175283294 -0.0249131580 0.2938824507
## AcceptedCmp2 1.000000000 -0.0110736709 0.1692486819
## Complain -0.011073671 1.0000000000 0.0001846593
## Response 0.169248682 0.0001846593 1.0000000000
Secara umum, pendapatan pelanggan (Income) merupakan variabel yang paling berpengaruh terhadap perilaku pembelian. Pelanggan dengan pendapatan tinggi cenderung memiliki pengeluaran yang lebih besar, frekuensi pembelian yang lebih tinggi, dan lebih aktif berbelanja melalui berbagai saluran. Selain itu, terdapat hubungan yang cukup kuat antar kategori produk dan antar saluran pembelian, yang mengindikasikan adanya pola konsumsi yang konsisten pada sebagian pelanggan.
vif_cols <- c("Income","NumWebVisitsMonth","Recency")
lm_formula <- as.formula(
paste("Response ~", paste(vif_cols, collapse = " + "))
)
vif_model <- lm(lm_formula, data = df)
vif_result <- vif(vif_model)
# Tabel VIF
vif_df <- data.frame(
Variabel = names(vif_result),
VIF = round(vif_result, 2),
Status = ifelse(vif_result > 10, "Berat (>10)",
ifelse(vif_result > 5, "Sedang (5-10)",
ifelse(vif_result > 2.5,"Moderat (2.5-5)","Rendah (<2.5)")))
)
print(vif_df, row.names = FALSE)## Variabel VIF Status
## Income 1.67 Rendah (<2.5)
## NumWebVisitsMonth 1.67 Rendah (<2.5)
## Recency 1.00 Rendah (<2.5)
Berdasarkan hasil pengujian Variance Inflation Factor (VIF), seluruh variabel independen memiliki nilai VIF yang rendah, yaitu Income sebesar 1,67, NumWebVisitsMonth sebesar 1,67, dan Recency sebesar 1,00. Seluruh nilai tersebut berada jauh di bawah batas umum 5 maupun 10 yang sering digunakan sebagai indikator adanya multikolinearitas.
Nilai VIF Income dan NumWebVisitsMonth yang sama-sama sebesar 1,67 menunjukkan adanya hubungan antarvariabel yang relatif lemah dan masih berada dalam batas yang dapat diterima. Sementara itu, nilai VIF Recency sebesar 1,00 menunjukkan bahwa variabel tersebut hampir tidak memiliki korelasi linear dengan variabel independen lainnya.
Dengan demikian, dapat disimpulkan bahwa tidak terdapat masalah multikolinearitas pada variabel Income, NumWebVisitsMonth, dan Recency. Kondisi ini menunjukkan bahwa masing-masing variabel memberikan informasi yang relatif berbeda sehingga layak digunakan secara bersamaan dalam proses pemodelan tanpa menimbulkan distorsi pada estimasi parameter model.
Feature engineering merupakan proses pembentukan variabel baru yang lebih informatif berdasarkan variabel-variabel asli pada dataset. Tahap ini dilakukan dengan tujuan untuk menyederhanakan struktur data, meningkatkan interpretabilitas, serta memperkuat representasi makna bisnis dalam analisis perilaku pelanggan.
Dalam penelitian ini, dilakukan pembentukan empat variabel baru yang merupakan hasil agregasi dari beberapa variabel asli pada dataset Customer Personality Analysis.
# FEATURE ENGINEERING
# 1. Total pengeluaran pelanggan
df$Total_Spending <- df$MntWines +
df$MntFruits +
df$MntMeatProducts +
df$MntFishProducts +
df$MntSweetProducts +
df$MntGoldProds
# 2. Total aktivitas pembelian (jumlah transaksi)
df$Total_Purchases <- df$NumDealsPurchases +
df$NumWebPurchases +
df$NumCatalogPurchases +
df$NumStorePurchases
# 3. Usia pelanggan
df$Age <- 2014 - df$Year_Birth
# 4. Lama menjadi pelanggan (tenure)
max_date <- max(df$Dt_Customer)
df$Tenure <- as.numeric(max_date - df$Dt_Customer)
# Preview hasil
head(df[, c("Total_Spending", "Total_Purchases", "Age", "Tenure")])## # A tibble: 6 × 4
## Total_Spending Total_Purchases Age Tenure
## <dbl> <dbl> <dbl> <dbl>
## 1 1617 25 57 971
## 2 27 6 60 125
## 3 776 21 49 472
## 4 53 8 30 65
## 5 422 19 33 321
## 6 716 22 47 453
1. Total Spending (Total Pengeluaran Produk)
Variabel Total_Spending merupakan total pengeluaran pelanggan pada seluruh kategori produk yang tersedia dalam dataset, yaitu wine, buah, daging, ikan, produk manis, dan produk emas.
2. Total Purchases (Total Transaksi)
Variabel Total_Purchases menunjukkan total jumlah transaksi pelanggan dari berbagai kanal pembelian, yaitu pembelian melalui web, katalog, toko fisik, serta pembelian dengan penawaran diskon.
3. Age (Usia Pelanggan)
Variabel Age dihitung berdasarkan selisih antara tahun referensi penelitian (2014) dengan tahun kelahiran pelanggan.
4. Tenure (Lama Menjadi Pelanggan)
Variabel Tenure menunjukkan lamanya pelanggan terdaftar sebagai pelanggan perusahaan
KESIMPULAN
Berdasarkan proses feature engineering, diperoleh empat variabel baru yaitu Total_Spending, Total_Purchases, Age, dan Tenure. Variabel-variabel tersebut merupakan hasil transformasi dari beberapa variabel asli yang bertujuan untuk menyederhanakan struktur data sekaligus meningkatkan interpretasi dalam analisis.
Dengan adanya variabel baru ini, data menjadi lebih ringkas, informatif, dan lebih sesuai untuk analisis lanjutan seperti Principal Component Analysis (PCA) maupun segmentasi pelanggan.
Feature selection merupakan proses pemilihan variabel yang paling relevan untuk digunakan dalam analisis, sekaligus mengurangi variabel yang memiliki informasi serupa atau bersifat redundan. Tujuan dari tahap ini adalah untuk memperoleh subset variabel yang lebih ringkas, tidak saling tumpang tindih, namun tetap mampu merepresentasikan karakteristik utama data.
Dalam penelitian ini, feature selection dilakukan menggunakan dua pendekatan, yaitu analisis korelasi dan Variance Inflation Factor (VIF).
Analisis korelasi digunakan untuk mengukur kekuatan hubungan antar variabel numerik. Variabel dengan korelasi yang tinggi menunjukkan adanya kemungkinan informasi yang serupa, sehingga dapat dipertimbangkan untuk direduksi atau direpresentasikan oleh variabel lain.
## Warning: package 'corrplot' was built under R version 4.5.3
## corrplot 0.95 loaded
library(dplyr)
# Ambil hanya variabel numerik
num_df <- df %>% select(where(is.numeric))
# Matriks korelasi
cor_matrix <- cor(num_df, use = "complete.obs")
# Visualisasi korelasi
corrplot(cor_matrix,
method = "color",
tl.cex = 0.7,
order = "hclust")Interpretasi Analisis Korelasi (Exploratory)
Pada visualisasi heatmap korelasi, hubungan antarvariabel ditunjukkan melalui gradasi warna. Warna biru menunjukkan korelasi positif, sedangkan warna merah menunjukkan korelasi negatif. Tingkat kekuatan hubungan ditentukan oleh intensitas warna, di mana biru tua atau merah tua menunjukkan korelasi yang kuat, sedangkan warna yang mendekati putih menunjukkan korelasi yang lemah atau hampir tidak ada hubungan linear.
Secara umum, pola korelasi pada data dapat dikelompokkan menjadi beberapa cluster berdasarkan kemiripan karakteristik variabel.
1. Kelompok 1: Variabel Pengeluaran dan Pembelian (Korelasi Positif Kuat – Biru Tua)
Kelompok pertama ditandai dengan warna biru tua yang dominan, yang menunjukkan korelasi positif yang cukup kuat antarvariabel. Kelompok ini terdiri dari:
Pola ini menunjukkan bahwa pelanggan yang memiliki pengeluaran tinggi pada satu kategori produk cenderung juga tinggi pada kategori lainnya, serta memiliki frekuensi pembelian yang lebih tinggi pada berbagai channel (web, katalog, dan toko). Selain itu, variabel Income juga memiliki korelasi positif terhadap kelompok ini, yang mengindikasikan bahwa semakin tinggi pendapatan pelanggan, semakin besar kecenderungan mereka untuk melakukan pembelian dan pengeluaran yang lebih tinggi.
2. Kelompok 2: Variabel Ringkasan (Representasi Utama)
Masih dalam kelompok biru, terdapat variabel Total_Spending dan Total_Purchases yang menunjukkan warna biru tua yang konsisten terhadap seluruh variabel pembentuknya.
Hal ini terjadi karena:
Dengan demikian, kedua variabel ini memiliki korelasi tinggi secara alami (matematis) terhadap variabel penyusunnya. Oleh karena itu, kedua variabel ini dapat dianggap sebagai variabel representatif (summary variables) yang merangkum informasi kompleks menjadi bentuk yang lebih sederhana.
3. Kelompok 3: Variabel Marketing Campaign (Biru Muda – Korelasi Sedang)
Kelompok berikutnya ditandai dengan warna biru muda hingga biru sedang, yang menunjukkan korelasi positif tetapi tidak sekuat kelompok pertama.
Variabel dalam kelompok ini meliputi:
Pola ini menunjukkan bahwa pelanggan yang menerima satu campaign cenderung memiliki kecenderungan untuk menerima campaign lainnya, meskipun tidak selalu kuat. Hal ini mengindikasikan adanya segmentasi perilaku pelanggan terhadap respons kampanye pemasaran, namun tidak sekuat hubungan pada variabel pembelian.
4. Kelompok 4: Variabel Demografis (Merah – Korelasi Negatif)
Kelompok ini ditandai dengan warna merah hingga merah muda, yang menunjukkan hubungan negatif terhadap variabel pengeluaran dan pembelian.
Variabel yang termasuk:
Interpretasinya adalah:
Namun perlu dicatat bahwa warna merah pada kelompok ini tidak terlalu gelap, sehingga hubungan negatif tersebut masih tergolong lemah hingga moderat, bukan hubungan yang dominan.
5. Kelompok 5: Variabel dengan Korelasi Lemah (Putih / Mendekati Netral)
Beberapa area pada heatmap menunjukkan warna mendekati putih, yang menandakan tidak adanya hubungan linear yang kuat antarvariabel.
Kelompok ini biasanya mencakup:
Hal ini menunjukkan bahwa tidak semua variabel dalam dataset memiliki hubungan linear yang signifikan.
Kesimpulan Eksplorasi Korelasi
Secara keseluruhan, heatmap menunjukkan adanya struktur data yang jelas dalam beberapa kelompok utama:
Berdasarkan pola tersebut, dapat disimpulkan bahwa struktur data didominasi oleh hubungan positif pada perilaku konsumsi pelanggan, sementara variabel demografis cenderung berperan sebagai faktor yang memengaruhi arah (negatif ringan) terhadap aktivitas pembelian.
Variance Inflation Factor (VIF) digunakan untuk mengukur tingkat multikolinearitas antar variabel independen. Nilai VIF yang tinggi menunjukkan adanya hubungan linear yang kuat antar variabel, sedangkan nilai VIF di bawah 5 umumnya menunjukkan bahwa tidak terdapat masalah multikolinearitas yang serius.
# FEATURE SELECTION - VIF
library(car)
# Model dummy digunakan hanya untuk menghitung VIF
# Variabel Income hanya sebagai variabel dependen sementara dan tidak dianalisis dalam model ini
vif_model <- lm(
Income ~ Age + Recency + Tenure +
Total_Spending + Total_Purchases,
data = df
)
# Menghitung nilai VIF
vif_values <- vif(vif_model)
# Membuat tabel hasil VIF
vif_df <- data.frame(
Variabel = names(vif_values),
VIF = round(vif_values, 2),
Status = ifelse(vif_values < 5, "Tidak ada multikolinearitas",
ifelse(vif_values < 10, "Multikolinearitas sedang",
"Multikolinearitas tinggi"))
)
print(vif_df)## Variabel VIF Status
## Age Age 1.04 Tidak ada multikolinearitas
## Recency Recency 1.00 Tidak ada multikolinearitas
## Tenure Tenure 1.04 Tidak ada multikolinearitas
## Total_Spending Total_Spending 2.33 Tidak ada multikolinearitas
## Total_Purchases Total_Purchases 2.42 Tidak ada multikolinearitas
Interpretasi VIF
Hasil perhitungan Variance Inflation Factor (VIF) menunjukkan bahwa seluruh variabel memiliki nilai yang rendah, yaitu Age (1.04), Recency (1.00), Tenure (1.04), Total_Spending (2.33), dan Total_Purchases (2.42). Seluruh nilai tersebut berada di bawah ambang batas 5, sehingga dapat disimpulkan bahwa tidak terdapat masalah multikolinearitas antar variabel independen.
Hal ini menunjukkan bahwa masing-masing variabel memberikan informasi yang berbeda dan tidak saling tumpang tindih secara berlebihan. Dengan demikian, seluruh variabel yang digunakan masih layak untuk dianalisis lebih lanjut.
Berdasarkan hasil analisis korelasi dan VIF, dipilih beberapa variabel yang dianggap mampu mewakili informasi penting dalam dataset tanpa menimbulkan masalah multikolinearitas.
Variabel yang Dipilih
Variabel yang dipilih untuk digunakan pada analisis selanjutnya adalah:
Alasan Pemilihan
Variabel-variabel tersebut dipilih karena mampu merepresentasikan karakteristik utama pelanggan dari aspek pendapatan, usia, lama menjadi pelanggan, aktivitas pembelian, dan total pengeluaran. Selain itu, berdasarkan hasil pengujian Variance Inflation Factor (VIF), seluruh variabel memiliki nilai di bawah 5 sehingga tidak menunjukkan adanya masalah multikolinearitas dan layak digunakan dalam analisis selanjutnya.
Variabel-variabel tersebut juga merupakan hasil ringkasan dari beberapa variabel asli melalui proses feature engineering. Oleh karena itu, penggunaan variabel asli secara bersamaan dengan variabel hasil ringkasan dapat menyebabkan terjadinya redundansi informasi dalam analisis.
Variabel yang Dieliminasi
Variabel yang tidak digunakan pada analisis selanjutnya adalah:
Alasan Eliminasi
Variabel Year_Birth dieliminasi karena informasinya telah direpresentasikan oleh variabel Age. Variabel Dt_Customer juga dieliminasi karena telah diringkas menjadi variabel Tenure.
Variabel Kidhome dan Teenhome juga dieliminasi karena termasuk variabel demografis yang informasinya sudah tercermin secara tidak langsung dalam pola pengeluaran dan aktivitas pembelian pelanggan. Selain itu, setelah proses agregasi variabel utama, kontribusi informasinya menjadi tidak signifikan terhadap variabel yang digunakan dalam analisis.
Sementara itu, variabel MntWines, MntFruits, MntMeatProducts, MntFishProducts, MntSweetProducts, dan MntGoldProds telah diringkas ke dalam variabel Total_Spending. Variabel NumDealsPurchases, NumWebPurchases, NumCatalogPurchases, dan NumStorePurchases juga telah diringkas ke dalam variabel Total_Purchases.
Karena seluruh informasi pada variabel-variabel tersebut sudah diwakili oleh variabel hasil ringkasan yang lebih sederhana, maka variabel tersebut tidak digunakan lagi secara terpisah pada analisis selanjutnya. Selain itu, variabel-variabel tersebut memiliki korelasi yang tinggi dengan variabel representatifnya sehingga dapat menimbulkan redundansi informasi apabila digunakan secara bersamaan dalam analisis.
Kesimpulan Feature Selection
Berdasarkan feature selection menggunakan metode korelasi dan Variance Inflation Factor (VIF), diperoleh enam variabel utama yang dipertahankan, yaitu Income, Age, Recency, Tenure, Total_Spending, dan Total_Purchases. Variabel-variabel tersebut dinilai mampu mewakili informasi penting dalam dataset serta tidak menunjukkan adanya masalah multikolinearitas, sehingga layak digunakan pada tahap analisis selanjutnya.
Feature extraction adalah proses mengekstrak informasi penting dari data, lalu mengubahnya menjadi representasi baru yang lebih ringkas dan informatif.
Tujuan
Pada penelitian ini, kami akan menggunakan Principal Component Analysis (PCA) untuk mereduksi dimensi. Principal Component Analysis (PCA) adalah teknik reduksi dimensi (feature extraction) yang menyederhanakan banyak variabel menjadi beberapa komponen utama.
Analisis PCA menggunakan fungsi prcomp() yang berasal package bawaan R dan standardisasi Z-score (scale) sebelum menganalis menggunakan PCA
# Membuat data frame baru berdasarkan tahapan analisis sebelumnya
df_final <- df %>% select(Income,
Age,
Recency,
Tenure,
Total_Spending,
Total_Purchases)
print(df_final)## # A tibble: 2,237 × 6
## Income Age Recency Tenure Total_Spending Total_Purchases
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 58138 57 58 971 1617 25
## 2 46344 60 38 125 27 6
## 3 71613 49 26 472 776 21
## 4 26646 30 26 65 53 8
## 5 58293 33 94 321 422 19
## 6 62513 47 16 453 716 22
## 7 55635 43 34 753 590 21
## 8 33454 29 32 488 169 10
## 9 30351 40 19 548 46 6
## 10 5648 64 68 268 49 2
## # ℹ 2,227 more rows
## Importance of components:
## PC1 PC2 PC3 PC4 PC5 PC6
## Standard deviation 1.6049 1.0294 1.0014 0.9530 0.53991 0.40234
## Proportion of Variance 0.4293 0.1766 0.1671 0.1514 0.04858 0.02698
## Cumulative Proportion 0.4293 0.6059 0.7731 0.9244 0.97302 1.00000
Loading factor (angka-angka dalam matriks) berkisar dari -1 hingga 1. Semakin angkanya menjauhi nol (baik positif maupun negatif), semakin besar pengaruh variabel tersebut terhadap PC pembentuknya.
## PC1 PC2 PC3 PC4 PC5
## Income -0.56177317 0.16762874 -0.006878867 0.161718718 -0.49305628
## Age -0.18140177 0.45462918 0.357061990 -0.790042867 -0.01851362
## Recency -0.01850299 -0.26018903 0.926116979 0.271843734 0.01781378
## Tenure -0.10420624 -0.82783283 -0.085348358 -0.499049768 -0.18959358
## Total_Spending -0.57678383 -0.05778346 -0.064941420 0.163212313 -0.25781635
## Total_Purchases -0.55463810 -0.09417254 -0.057140414 0.009559198 0.80859163
## PC6
## Income -0.622098664
## Age 0.091662173
## Recency -0.007092583
## Tenure -0.107485494
## Total_Spending 0.752765948
## Total_Purchases -0.162269185
1. Scree Plot
Grafik ini membuktikan bahwa kita memiliki dua kelompok perilaku utama di dalam data. Kelompok pertama dipengaruhi oleh tarik-menarik antara V1 melawan V4 dan V5 (Sumbu mendatar). Sedangkan kelompok kedua sepenuhnya dikendalikan oleh V3 dan V6 (Sumbu vertikal).
2. Biplot
Semakin jauh sebuah titik menjauhi angka 0 (baik ke atas, bawah, kiri, atau kanan), makin ekstrem atau unik karakteristik baris data tersebut. Titik yang paling ujung bisa dicurigai sebagai Outlier (pencilan).
Berdasarkan analisis reduksi dimensi menggunakan metode PCA pada data Customer Personality Analysis dinilai berhasil karena mampu meringkas 6 variabel awal menjadi hanya 3 Komponen Utama (PC) namun tetap mempertahankan 77,31% total variasi informasi. Secara substantif, komponen-komponen ini memetakan pelanggan ke dalam tiga dimensi utama: PC1 (“Kekuatan Beli dan Finansial”) yang didorong oleh variabel paling penting dalam dataset yaitu Total_Spending, Income, dan Total_Purchases; PC2 (“Tingkat Loyalitas”) yang dikendalikan oleh lama berlangganan (Tenure) dan usia; serta PC3 (“Aktivitas Terkini”) yang bertumpu pada Recency.
Dari pengelompokan profil tersebut serta eksplorasi data secara keseluruhan, diperoleh insight bahwa pelanggan didominasi oleh kalangan dewasa hingga lansia berpendapatan stabil yang memiliki preferensi kuat pada produk anggur (wine) dan daging, serta lebih suka berbelanja langsung di toko fisik meskipun angka kunjungan ke website cukup tinggi. Secara bisnis, hal ini menunjukkan bahwa meskipun tingkat kepuasan pelanggan sangat baik (keluhan di bawah 1%), perusahaan mendesak untuk merombak strategi kampanye pemasarannya yang saat ini memiliki tingkat respons sangat rendah (di bawah 15%), misalnya dengan menargetkan promosi produk unggulan secara lebih spesifik pada segmen pelanggan dengan skor PC1 (kekuatan finansial) yang tinggi.