240614 Today I Learn
ํด๋ฌ์คํฐ๋ง์ด๋?
๐ก ํด๋ฌ์คํฐ๋ง
๋ฐ์ดํฐ๋ถ์์์ ํผ์ณ(์ปฌ๋ผ) ์ ์ฌ์ฑ์ ๊ฐ๋ ์ ๊ธฐ๋ฐ์ผ๋ก ์ ์ฒด๋ฐ์ดํฐ์ ์ ๊ทธ๋ฃน์ผ๋ก ๋๋๋ ๊ธฐ๋ฒ.
(์ด๋, ๊ฐ ๊ทธ๋ฃน์ ํด๋ฌ์คํฐ๋ผ๊ณ ํ๋ค.)
→ ๋ฐ์ดํฐ๋ถ์๊ฐ๋ ๋ฐฉ๋ํ๊ฒ ๊ตฌ์ถ๋ DB์์ ์๋ฏธ์๋ ํน์ง(์ปฌ๋ผ)์ ์ฐพ๊ณ ,
์ต์ ์ ๊ทธ๋ฃน ๊ฐ์๋ฅผ ์ฐพ์ ๊ทธ๋ฃน๋ณ ์ธ์ฌ์ดํธ๋ฅผ ๋์ถํ๋ ์ญํ ์ ์ํํ๊ฒ ๋๋ค.
ํด๋ฌ์คํฐ๋ง ํ๋ก์ธ์ค
์ ์ฒ๋ฆฌ ํ๋ก์ธ์ค
1. ๊ธฐ๊ฐ์ ์ : ํด๋ฌ์คํฐ๋ง์ ์ํ ๋ฐ์ดํฐ ๊ธฐ๊ฐ์ ์ค์
- ์ต์ 3๊ฐ์ ์ด์์ ๋ฐ์ดํฐ์ ์ด ๊ถ์ฅ → ์ฃผ๋ณ/ ์๋ณ ์ด๋ฒคํธ/์๋น์ค ์งํ. ๋ฐ๋ผ์ ์ด๋ฌํ ํน์ฑ์ ํ๋ฌ๋ง ๋ณด๊ณ ํ๋จํ๊ธฐ๋ ์ด๋ ค์.
- ํด๋ฌ์คํฐ๋ง์ ๋ชฉ์ : live ํ ๋ฐ์ดํฐ์ ์ ์
์ ํด๋น ์ ์ ์ ํ๋์ ํตํด, ์ด๋ฅผ ์๋ง๊ฒ ๋ฐฐ์น์ํค๋ ๋ชจ๋ธ์ ์์ฑ
→ ์๋น์ค ๋ณ๋์ฌํญ์ ๋ฐ๋ผ์ ์ผ์ ์ฃผ๊ธฐ์ ๋ฐ๋ผ ์ฌ์ํ
2. ์ด์์น ๊ธฐ์ค์ ์ ๋ฐ ์ ์ธ : IQR, Z-SCORE ๋ฑ ๋ค์ํ ์ด์์น ๊ธฐ๋ฒ์ ์ฌ์ฉํด๋ณด๊ณ , ์ด์์น ๋น์ค์ ๊ธฐ๋ก
- ํต๊ณ์ ๊ธฐ๋ฒ : Z-Score, IQR(Interquartile Range), Isolation Forest, DBScan
- ํ์ฌ์ ๋์ฆ์ ๋ฐ๋ผ ํน์ ์กฐ๊ฑด์ ๋ฐ๋ผ ์ด์์น์ ๊ธฐ์ค์ ์ ๋ฆฝํ๊ณ ์ด๋ฅผ ์ ์ฉํ์ฌ ๋ฐ์ดํฐ ํธ๋ค๋ง์ ์งํํ๊ธฐ๋ ํจ.
3. ํ์คํ : ๋ฐ์ดํฐ์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ํฌ๊ฑฐ๋, ์ปฌ๋ผ ๊ฐ ๋ฐ์ดํฐ range ์ ์ฐจ์ด๊ฐ ๋ง์ ๋ ์ผ๋ถ ์ปฌ๋ผ์ ๋ํด ์งํ
→ Clustering์์ ํ์๋ ์๋..!
- MinMax Scale : ๋ชจ๋ ๋ฐ์ดํฐ์ ๊ฐ์ 0๊ณผ 1 ์ฌ์ด์ ๋ฐฐ์น
- ์ด์์น์ ์ฝํ๋ค → ์ ์ฒด ๋ฐ์ดํฐ ๋ถํฌ๊ฐ ๋ญ๊ฐ์ง ์ ์๋ค.
- Standard Scale : ํ๊ท ์ 0, ํ์คํธ์ฐจ๋ฅผ 1๋ก ๋ณํ ๐ ๊ตฐ์ง๋ถ์ ์ ๊ฐ์ฅ ๋ง์ด ์ํ
- minmax scale ์ด ๊ฐ์ง๋ ํ๊ณ์ ์ ๋ณด์ → ์ด์์น์ ๊ฐํจ
- ๊ฐ๊ฐ์ data point ๊ฐ ‘ํ๊ท ์ผ๋ก๋ถํฐ ์ผ๋ง๋ ๋จ์ด์ ธ ์๋์ง’ ์ ๋ํ ์์น๋ก ๋ณํ
4. ์ฐจ์์ถ์(PCA) : ๋ง์ ์ปฌ๋ผ์ผ๋ก ๊ตฌ์ฑ๋ ๋ค์ฐจ์ ๋ฐ์ดํฐ ์ธํธ์ ์ฐจ์์ ์ถ์ํด ์๋ก์ด ์ฐจ์์ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์์ฑํ๋ ๊ฒ
๐ก PCA ((Principal Component Analysis, ์ฃผ์ฑ๋ถ๋ถ์)
๋ถ์ฐ์ด ์ต๋๊ฐ ๋๋ ์ถ์ ์ฐพ์. (์คํ๋ ๋๊ฐ ํฐ ๊ณณ์ ์ถ์ ๋์). ๋๋ฒ์งธ ์ถ์ ์ฒซ๋ฒ์งธ ์ถ๊ณผ ์์ง์ด๋ฉด์ ๋ถ์ฐ์ด ํฐ ์ถ.
Experiment ํ๋ก์ธ์ค
5. K๊ฐ(๊ตฐ์ง๊ฐฏ์), ์ด๊ธฐ ์ปฌ๋ผ(ํผ์ณ) ์ ์ : ์ด๊ธฐ ๊ตฐ์ง์ ๊ฐฏ์๋ฅผ ์ง์
- ์ด๊ธฐ ์ปฌ๋ผ์ ์ค์ ์ ๋ชจ๋ ์ปฌ๋ผ์ ๊ธฐ์ค์ผ๋ก ์งํ.
- Silhouette Coefficient, elbow-point, Distance Map ์ ํตํด ์ด๊ธฐ ๊ตฐ์ง์ ๊ฐฏ์๋ฅผ ์ง์
๐ก ์ค๋ฃจ์ฃ ๋ถ์
๊ฐ ๊ตฐ์ง๊ฐ์ ๊ฑฐ๋ฆฌ๊ฐ ์ผ๋ง๋ ํจ์จ์ ์ผ๋ก ๋ถ๋ฆฌ๋์ด ์๋์ง๋ฅผ ๋ํ๋. -1์์ 1 ์ฌ์ด์ ๊ฐ์ ๊ฐ์ง.
๋ค๋ฅธ ๊ตฐ์ง๊ณผ์ ๊ฑฐ๋ฆฌ๋ ๋จ์ด์ ธ์๊ณ , ๋์ผ ๊ตฐ์ง๋ผ๋ฆฌ ๋ฐ์ดํฐ๊ฐ ์๋ก ๊ฐ๊น๊ฒ ๋ญ์ณ ์๋์ง ํ๋จํ ์ ์์.
- -1์ด๋ 1์ ๊ฐ๊น์ธ ์๋ก ๊ตฐ์ง ๊ฐ ๊ฑฐ๋ฆฌ๊ฐ ์ ์๋ฏธํ๊ฒ ๊ตฌ๋ถ๋๋ค
- 0์ ๊ฐ๊น์ธ์๋ก ๊ทผ์ฒ ๊ตฐ์ง๊ณผ ๊ฐ๊น๋ค
๐ก Scree - plot์ elbow-point
์๊ณ ๋ฆฌ์ฆ์ด ๊ตฐ์ง์ด ๋๋๋ ์๊ฐ๊น์ง ๊ณ ๋ คํ k๊ฐ์ ๋์ถ.
๐ก Distance Map
๊ตฐ์ง ๊ฐ ๊ฑฐ๋ฆฌ๋ฅผ ์๊ฐํ ํด์ฃผ๋ ๊ธฐ๋ฒ
→ ๊ตฐ์ง์ด ๋จ์ด์ ธ ์๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ฐ์์ ์ผ๋ก ํ์ธํ๊ธฐ ์ํ ์ฐธ๊ณ ์น์ผ ๋ฟ
- ํด๋ฌ์คํฐ๋ง์ ๋ฐ๋ณต์งํํ๋ฉฐ, k๊ฐ๊ณผ ํผ์ณ์ ์ปจ๋์ ์ ๊ธฐ๋กํ๊ณ , ์ต์ ์ผ๋ก ๊ตฌ๋ถ๋ ์ปจ๋์ ์ฐพ๊ธฐ
6. k-means clustering ์ํ : ๋ฐ์ดํฐ๋ฅผ ๊ฑฐ๋ฆฌ๊ธฐ๋ฐ K๊ฐ์ ๊ตฐ์ง(Cluster)์ผ๋ก ๋ฌถ๋(Clusting) ์๊ณ ๋ฆฌ์ฆ.
→ ๊ฐ ๊ตฐ์ง์ ํ๊ท (mean)์ ํ์ฉํ์ฌ K๊ฐ์ ๊ตฐ์ง์ผ๋ก ๋ฌถ๋๋ค.
๐ก K-Means ์๊ณ ๋ฆฌ์ฆ
1. ๊ตฐ์ง ์ K ์ค์
2. ์ด๊ธฐ ์ค์ฌ์ K๊ฐ ์ค์
3. ์ค์ฌ์ ์ ๊ธฐ์ค์ผ๋ก data point ๋ค์ ๊ฑฐ๋ฆฌ๋ฅผ ๋น๊ตํ๊ณ , ๋ ๊ฐ๊น์ด ์ค์ฌ์ ์ ๊ตฐ์งํ ๋น
4. ํ ๋น๋ ์ ๋ค์ ์ ์ค์ฌ์ ์์น ์กฐ์ ๋จ
5. ์ค์ฌ์ ์ ์์น๊ฐ ๋ณํ์ง ์์๋๊น์ง ๋ฐ๋ณต
7. ๊ตฐ์ง ๋ถํฌ ํ์ธ : ๋ฐ์ดํฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์(์ผ๋ง๋ ๋ฐ๋์๊ฒ) ๋๋์๋์ง ํ์ธํ๋ ๊ณผ์
8. 2~7๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ ์ต์ ์ ๊ฒฐ๊ณผ ๋์ถ
- ์คํ์ ์ํํ ๋๋ง๋ค, ๋ค์ํ ๊ธฐ์ค์ ๊ณ ๋ ค
- ๋ฐ์ดํฐ ์์ฒด์ ๊ฒฐ์ธก์ด ๋ง์ง๋ ์์์ง?
- ๋ฐ์ดํฐ๊ฐ ๊ฒฐ์ธก์ ์๋๋, value๊ฐ 0์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์์ง?
- ๋ฐ์ดํฐ์ ์ ๋ฐ์ ์ธ ๋ถํฌ๋ ์ด๋ ํ์ง?์ปฌ๋ผ ๊ฐ ์๊ด๊ณ์๋ ์ด๋ ํ์ง?
- ๋ฐ์ดํฐ๊ฐ ๋ถ๊ท์นํ์ง?
- ์ปฌ๋ผ์ด ๊ฐ์ง๋ ๊ฐ๋ ์ ์ธ ์๋ฏธ๋ ๋ฌด์์ธ์ง?
- ์ปฌ๋ผ๊ฐ์ด ์ด์งํ์ธ์ง?
- cluster ๋น์ค์ด ์ง๋์น๊ฒ ํธํฅ๋์ด ์๋์ง?
9. ๋ชจ๋ธ๋ง : ํด๋ฌ์คํฐ๋ง ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ง๊ณ ์ด๋ฅผ ๋ชจ๋ธ์ ํ์ต
10. ๋ฐ์ดํฐ ์ ์ฌ ๋ฐ ์๋ํ ์ค์
- cluster ๋ณ๋ก ๋๋ ๊ณ ๊ฐ๋ค์ ๋ณ๋ ํ ์ด๋ธ์ ์ ์ฅ
- ์ค์ผ์ค ๊ธฐ๋ฅ์ ํตํด, ์ฃผ๊ธฐ๋ณ๋ก ๋ผ์ด๋ธํ ๋ฐ์ดํฐ๋ฅผ ์๋ ํ ์ด๋ธ ์ ์ฌํ๋ ๊ฒ๊น์ง๊ฐ ํด๋ฌ์คํฐ๋ง์ ์ต์ข ์์
11. ์ธ์ฌ์ดํธ ๋์ถ
ํด๋ฌ์คํฐ๋ง ์ค์ต
๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ & ๋ฐ์ดํฐ์ import
# ๊ธฐ๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ import
import pandas as pd
import numpy as np
# ์๊ฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ import
import seaborn as sns
import matplotlib.pyplot as plt
# ๋ฐ์ดํฐ์
๋ก๋
base_df = pd.read_csv('merge_df.csv')
# ํด๋ฌ์คํฐ๋ง ํ ์ปฌ๋ผ ์ง์
feature_names=['customer_zip_code_prefix','price','shipping_charges','payment_sequential','payment_value']
# ์ง์ ๋ ์ปฌ๋ผ์ผ๋ก ์๋ก์ด dataframe ์์ฑ
base_df = pd.DataFrame(base_df, columns=feature_names)
ํ์คํ
# ํ์คํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ import
from sklearn.preprocessing import StandardScaler
# ํ์คํ ๋ฐฉ์: standard scaler (ํ๊ท 0, ๋ถ์ฐ1)
scale_df = StandardScaler().fit_transform(base_df)
PCA
# ์ฃผ์ฑ๋ถ ๊ฐ์๋ฅผ ํ๋จํ๊ธฐ ์ํ pca์์ ์ํ
pca = PCA(n_components=3)
pca.fit(scale_df)
# ์ค์ ํ ์ฃผ์ฑ๋ถ์ ๊ฐฏ์๋ก ์ ์ฒด ๋ฐ์ดํฐ ๋ถ์ฐ์ ์ผ๋งํผ ์ค๋ช
๊ฐ๋ฅํ์ง
pca.explained_variance_ratio_.sum()
## 0.8233997183348545
# pca ์ํ
pca_df = pca.fit_transform(scale_df)
pca_df = pd.DataFrame(data = pca_df, columns = ['PC1','PC2','PC3'])
# Show the first 5 firms
pca_df.head()
K๊ฐ, ์ด๊ธฐ ์ปฌ๋ผ(ํผ์ณ) ์ ์ - KElbowVisualizer, Distance map
# ์ด๊ธฐ k ๊ฐ ์ฐธ๊ณ ๋ฅผ ์ํ scree plot ์ ๊ทธ๋ฆฌ๊ณ , ๊ตฐ์ง์ด ๋๋๋ ์๊ฐ๊น์ง ๊ณ ๋ คํ k ๊ฐ ํ์ธ
model = KMeans()
# k ๊ฐ์ ๋ฒ์๋ฅผ ์กฐ์ ํด ์ค ์ ์์ต๋๋ค.
visualizer = KElbowVisualizer(model, k=(3,12))
# ๋ฐ์ดํฐ ์ ์ฉ
visualizer.fit(pca_df)
visualizer.show()
# ์ด๊ธฐ k ๊ฐ ์ฐธ๊ณ ๋ฅผ ์ํ distance map ์๊ฐํ
# ๊ทธ๋ฃน์ ๊ฐฏ์๋ฅผ ์ง์ ํด ์ค ์ ์์.
intercluster_distance(MiniBatchKMeans(5, random_state=42), pca_df)
K-Means
# KMEANS
# ๊ตฐ์ง๊ฐ์(n_cluster)๋ 5,์ด๊ธฐ ์ค์ฌ ์ค์ ๋ฐฉ์ ๋๋ค,
kmeans = KMeans(n_clusters=5, random_state=42,init='random')
# pca df ๋ฅผ ์ด์ฉํ kmeans ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ
kmeans.fit(pca_df)
# ํด๋ฌ์คํฐ ๋ฒํธ ๊ฐ์ ธ์ค๊ธฐ
labels = kmeans.labels_
# ํด๋ฌ์คํฐ ๋ฒํธ๊ฐ ํ ๋น๋ ๋ฐ์ดํฐ์
์์ฑ
kmeans_df = pd.concat([pca_df, pd.DataFrame({'Cluster':labels})],axis = 1)
์๊ฐํ
1. 3์ฐจ์์ผ๋ก ์๊ฐํ
x =kmeans_df["PC1"]
y =kmeans_df["PC2"]
z =kmeans_df["PC3"]
fig = plt.figure(figsize=(12,10))
ax = plt.subplot(111, projection='3d')
ax.scatter(x, y, z, s=40, c=kmeans_df["Cluster"], marker='o', alpha = 0.5, cmap = 'Spectral')
ax.set_title("The Plot Of The Clusters(3D)")
plt.show()
2. 2์ฐจ์์ผ๋ก ์๊ฐํ
plt.figure(figsize=(8,6))
sns.scatterplot(data = kmeans_df, x = 'PC1', y='PC2', hue='Cluster')
plt.title('The Plot Of The Clusters(2D)')
plt.show()
'๐ Today I Learn > ๐ Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spark๋ฅผ ์ด์ฉํ ๋น ๋ฐ์ดํฐ ๋ถ์ (2) (0) | 2024.07.17 |
---|---|
Spark๋ฅผ ์ด์ฉํ ๋น ๋ฐ์ดํฐ ๋ถ์ (1) (1) | 2024.07.17 |
๋จธ์ ๋ฌ๋ ํน๊ฐ #2 ํ๊ท(Regression) (0) | 2024.06.15 |
[๊ฐ์ธ ๊ณผ์ ] ๋จธ์ ๋ฌ๋ ๊ฐ์ธ๊ณผ์ (1) | 2024.06.13 |
๋จธ์ ๋ฌ๋์ ์ดํด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ (7) ๋ฅ๋ฌ๋ (1) | 2024.06.13 |