- 주성분 분석(PCA)
- 기존 데이터들 중 주성분이 될 수 있는 컬럼들을 변환하여 주성분을 추출해내는 것(데이터 바뀜)
- 위와 같은 이유로 원래의 컬럼의 데이터 원본이 중요하다면 PCA 진행시 제외할 것
- 주성분: 전체 데이터의 분산을 가장 잘 설명해주는 것
- 하나의 변수는 하나의 차원을 의미하기 때문에 주성분 분석을 통해 차원 축소를 진행할 수 있음
- 프로젝트 내의 PCA 진행 및 클러스터링
# 엘보우 방식 통해 클러스터 개수 계산
sse = []
scaler = StandardScaler()
rfm_scaled = np.log(rfm[['recency','frequency','monetary']])
rfm_scaled = scaler.fit_transform(rfm_scaled)
for k in range(1, 11):
kmeans = KMeans(n_clusters = k, random_state=42)
kmeans.fit(rfm_scaled)
sse.append(kmeans.inertia_)
plt.figure(figsize=(10, 6))
plt.plot(range(1, 11), sse, marker='o')
plt.title('Elbow Method')
plt.xlabel('Number of clusters')
plt.ylabel('SSE')
plt.show()
# 스케일링된 데이터로 PCA (Principle Component Analysis) 주성분 분석
pca = PCA(n_components = 2)
pca_data = pca.fit_transform(rfm_scaled)
print('Explained variance ratio:', pca.explained_variance_ratio_)
#클러스터링
k = 4
kmeans = KMeans(n_clusters = k, random_state = 42, init = 'k-means++')
clusters = kmeans.fit_predict(rfm_scaled)
cluster_labels = kmeans.labels_
# kmeans 시각화
plt.figure(figsize=(15, 10))
sns.scatterplot(x=pca_data[:, 0], y=pca_data[:, 1], hue=clusters, palette='viridis')
plt.title('KMeans Clustering Results')
plt.xlabel('PCA 1')
plt.ylabel('PCA 2')
plt.show()
#각 군집별 RFM 시각화
rfm_df = rfm.groupby('cluster').agg({'recency': 'mean', 'frequency': 'mean', 'monetary': 'mean'}).round(2).reset_index()
fig, ax=plt.subplots(1,3,figsize=(15,5))
sns.barplot(data = rfm_df , x = 'cluster', y = 'recency', ax=ax[0], color = 'lightblue');
sns.barplot(data = rfm_df , x = 'cluster', y = 'frequency', ax=ax[1], color = 'lightgreen');
sns.barplot(data = rfm_df , x = 'cluster', y = 'monetary', ax=ax[2], color = 'red');
'Data > [스파르타 내일배움캠프]' 카테고리의 다른 글
[TIL]본캠프 46일차(심화 프로젝트 5일차) (0) | 2024.06.21 |
---|---|
[TIL]본캠프 45일차(심화 프로젝트 4일차) (0) | 2024.06.20 |
[TIL]본캠프 43일차(심화 프로젝트 2일차) (2) | 2024.06.18 |
[TIL]본캠프 42일차(심화 프로젝트 1일차) (2) | 2024.06.17 |
[WIL]본캠프 9주차 (0) | 2024.06.14 |