- 客户细分(K-均值聚类)
- 数据集:使用任何公开的客户数据集,如零售数据。
- 任务:根据购买行为对客户进行分组。
- 挑战:尝试不同的聚类算法(如DBSCAN、层次聚类)和调整参数来找到最佳的客户分组。* h) V( k. D& F
9 ~7 v2 P8 e ]7 e! }
使用KMeans进行客户细分- from sklearn.cluster import KMeans
* R/ P# @% D* s5 c' ^% r - from sklearn.preprocessing import StandardScaler: J& @& w/ m3 I! Y( m+ P
- import pandas as pd
& a2 \: W2 J- }8 X -
: ^) F- Z. L# [8 ~# }( T - # 加载客户数据集
* {& B/ l; E$ B( U+ ], c0 J1 M - # 假设df是一个Pandas DataFrame,包含了你感兴趣的特征
: i( z/ P7 [\" _$ j - # df = pd.read_csv('your_customer_data.csv')
% ^. s; p8 ^\" Y+ y2 ?$ a9 c - J: Z$ P4 _9 V) f1 h
- # 对数据进行标准化处理( Y5 x k; q/ a& g
- scaler = StandardScaler()0 D; p, o3 e3 F
- scaled_features = scaler.fit_transform(df)1 A: N Z\" r8 A5 `
-
' U# Q0 e5 D, u - # 使用KMeans进行聚类' D+ u2 ]! c' Q' D5 V3 b
- kmeans = KMeans(n_clusters=5, random_state=42) Q) A$ y, c2 d) v
- kmeans.fit(scaled_features)- F* _7 z: E3 V6 F* G( D& V
-
7 |1 o! q' ?, |- L0 M - # 将聚类结果添加到原始DataFrame中
# a2 C8 l$ f5 c4 T2 @ - df['Cluster'] = kmeans.labels_
; R+ `) N$ j* C) G: t+ }2 Z8 n) u: M% u6 e -
. K9 I/ T+ M* l$ q1 p! r - # 查看聚类结果
3 u3 j. P5 ^. @\" e) V - print(df.head())
复制代码在这个示例中,我们首先对特征进行了标准化处理,这是聚类分析中的一个常见步骤,以确保所有特征在相同的尺度上。然后,我们使用KMeans算法对客户进行了分组,这里假设我们想要将客户分成5个群体。 尝试其他聚类算法DBSCAN- from sklearn.cluster import DBSCAN
# [$ g% }\" ?: Y% N, k! H4 @ - ( `9 L3 D8 q) Y s' M5 q3 I# e
- # 使用DBSCAN进行聚类. S6 }1 m, X7 ?+ p6 o2 O5 \6 T\" x
- dbscan = DBSCAN(eps=0.5, min_samples=5)
7 k6 Q g* v9 `9 n' C: K. R9 I - df['Cluster'] = dbscan.fit_predict(scaled_features)3 k I8 N; s7 A
- ( H7 L! z0 @# X8 M* g
- # 查看聚类结果
2 A0 R8 n9 T6 z4 D. g ^' w - print(df.head())
复制代码 层次聚类- from sklearn.cluster import AgglomerativeClustering6 f, O9 G0 V1 d% O
- ! Q! m\" @% ]5 M/ v; X
- # 使用层次聚类进行聚类
/ u7 o- q# N8 T- _ Y\" _ - agg_clustering = AgglomerativeClustering(n_clusters=5, affinity='euclidean', linkage='ward')3 a) m7 M- n/ R6 U! [
- df['Cluster'] = agg_clustering.fit_predict(scaled_features)
) D\" Y( s/ l) {) S$ n -
! N, p; `, l9 z! K: }% @/ c# g - # 查看聚类结果
3 [7 I9 d+ W. ?, u* { - print(df.head())
复制代码 调整参数和选择算法4 x7 P6 r3 M' D; @. K4 ]. x
KMeans:n_clusters是一个关键参数,决定了聚类的数量。可以使用轮廓分析或肘方法来帮助确定最佳的聚类数量。$ L9 p' i5 S( Q G+ I
DBSCAN:eps和min_samples是关键参数,分别决定了样本成为核心点的条件。这些参数对结果的影响较大,通常需要通过尝试不同的值来找到最佳的参数设置。
$ ~8 e' c8 N4 }+ t5 [层次聚类:n_clusters、affinity和linkage是重要的参数,它们分别控制聚类的数量、用于计算距离的方法和聚类合并的准则。
) I3 k+ |- ?9 n* g2 e7 S/ E! f+ {选择哪种聚类算法以及相应的参数设置,取决于数据集的特性和分析任务的目标。实践中,通常建议尝试多种聚类算法和参数配置,然后根据聚类的质量(例如,通过轮廓系数评估)来选择最佳的方法7 E& E5 }" C/ t5 z+ t" C+ k
% l+ s, z5 Z/ l. ~3 Q2 j' u) Z
- H& ]# F2 `+ _+ L: t6 \8 V0 m# Y' j+ D0 N: ?! ^+ ~
|