목차
- CSV 파일 불러오기
- 데이터 분석
- data_info
- data_nulls
- pairplot
- 데이터 분석
- 데이터셋 탐색 및 전처리
- 결측치 처리
- 엘보우 메서드
- 2D로 결과 시각화
주제, 목표, 학습 내용
더보기
💡 주제
고객 세분화 분석
🎯 목표
고객 데이터셋을 사용하여 비슷한 행동을 보이는 고객 그룹을 식별합니다.
📖 학습 내용
- 비지도 학습의 개념을 이해하고, 클러스터링 기법을 통해 데이터의 패턴을 발견하는 능력
- 데이터 전처리 및 탐색: 비지도 학습에서의 데이터 준비 과정
- 클러스터링 기법 적용: 다양한 클러스터링 알고리즘의 이해와 실습
- 최적의 클러스터 수 결정: 모델의 성능을 평가하는 방법과 시각화 기술을 통해 인사이트 도출
과제 가이드
더보기
1. 데이터셋 탐색 및 전처리:
- 결측치 처리
- 스케일링
- 데이터의 스케일을 조정하기 위해 표준화(Standardization) 또는 정규화(Normalization)를 수행합니다
2. 클러스터링 기법 적용:
- K-means
- 계층적 군집화
- DBSCAN 등의 알고리즘
3. 최적의 클러스터 수 결정:
- 엘보우 방법 또는 실루엣 점수를 사용하여 최적의 클러스터 수를 찾습니다.
4. 결과 시각화:
- 클러스터링 결과를 2D 또는 3D로 시각화하여 고객 세분화 결과를 분석합니다.
- 시각화: matplotlib 또는 seaborn을 사용하여 클러스터를 색상으로 구분하여 시각화합니다. 2D 플롯을 사용하여 각 클러스터를 다른 색으로 표현합니다.
0. 자료 분석
- 쇼핑몰 고객의 정보
- 칼럼명
- CustomerID : 고객의 고유 식별 번호
- Gender : 고객의 성별 (Male: 남성, Female: 여성)
- Age : 고객의 나이
- Annual Income (k$) : 고객의 연간 소득을 천 달러 단위로 나타냄 (15 == $15,000)
- Spending Score (1-100) : 고객의 소비 점수를 1~100으로 점수를 나타냄
- 총 행 개수 : 200개
- 결측값 개수 : 0개
1. CSV 파일 불러오기
import pandas as pd
df_mall = pd.read_csv('Mall_Customers.csv')
df_mall
1.1. 데이터 분석
1.1.1. data_info
# 데이터 구조 확인_info
data_info = df_mall.info()
# 칼럼 수 : 총 5개
# 결측값 없음을 알 수 있음
# 데이터 타입이 int와 object가 있는 것을 알 수 있음
📚 자료 분석
- RangeIndex: 200 entries, 0 to 199
- 시작 번호가 0부터 끝 번호 199까지 해서 총 200개의 행이 있음을 알 수 있어요
- Data columns (total 5 columns):
- 총 5가지의 칼럼들이 있어요
- dtypes: int64(4), object(1)
- int형인 칼럼이 4개가 있고 object으로 칼럼이 1개 있어요
1.1.2. data_nulls
# 데이터 구조 확인_nulls
data_nulls = df_mall.isnull().sum()
data_nulls
📚 자료 분석
- 모두 0이 출력된 것을 보아, 결측치는 없다는 것을 알 수 있어요
1.1.3. pairplot
# pairplot 그래프로 연관관계 확인하기
## x축과 y축이 같을 때는 막대 그래프로 표기된다는 것도 알 수 있음
import matplotlib.pyplot as plt
import seaborn as sns
sns.pairplot(df_mall)
📚 그래프 분석
- 군집 수를 총 2가지 연관성으로 알 수 있어요
- CustomerID & Spending Score(1-100)(==소비 점수)
- Annual Income(k$)(==연간 소득) & Spending Score(1-100)
- 군집 수가 5가지로 몰려있다는 것을 확인할 수 있었어요
- 클러스트링 할 때 k=5으로 설정해야겠어요
2. 데이터셋 탐색 및 전처리
2.1. 결측치 처리
# 데이터 구조 확인_nulls
data_nulls = df_mall.isnull().sum()
data_nulls
📚 자료 분석
- data_nulls = df_mall.isnull().sum()
- 처리할 결측치는 없다고 뜨네요!
2.2. 엘보우 메서드
# 스케일링_K-means_엘보우
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 수치값으로 입력된 칼럼 모으기_나이, 연간 소득, 소비 점수
numerical_columns = ['Age', 'Annual Income (k$)', 'Spending Score (1-100)']
X = df_mall[numerical_columns]
# StandardScaler를 써서 데이터 확장하기
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
# 엘보우 방법을 사용하여 최적의 K값 탐색
inertia = []
range_clusters = range(1, 11)
for k in range_clusters:
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X_scaled)
inertia.append(kmeans.inertia_)
# 엘보우 메소드 생성하기
plt.figure(figsize=(8, 5))
plt.plot(range_clusters, inertia, marker='o', linestyle='--')
plt.title('Elbow Method')
plt.xlabel('Number of Clusters')
plt.ylabel('Inertia')
plt.show()
📚 자료 분석
3. 2D로 결과 시각화
# 엘보우를 봤을 때 X축이 5일 때가 엘보우로 보여서 클러스터를 5로 설정
optimal_k = 5
kmeans = KMeans(n_clusters=optimal_k, random_state=42)
kmeans_labels = kmeans.fit_predict(X_scaled)
# K-means 클러스팅 결과를 통해서 2D로 시각화 하기
plt.figure(figsize=(8, 6))
sns.scatterplot(x=X_scaled[:, 0], y=X_scaled[:, 1], hue=kmeans_labels, palette='viridis', s=50)
plt.title('K-means Clustering Results')
plt.xlabel(numerical_columns[0])
plt.ylabel(numerical_columns[1])
plt.legend(title='Cluster')
plt.show()
📚 자료 분석
- 색상별로 군집이 있다고 판단하면 돼요
- optimal_k = 5
- 이 코드가 클러스터 수를 의미하는 것이라 보면 돼요
- kmeans = KMeans(n_clusters=optimal_k, random_state=42)
- 이렇게 n_clusters로도 명시돼 있어요!
- plt.figure(figsize=(8, 6))
- 그래프 크기(가로, 세로)를 설정하는 코드예요
- sns.scatterplot(x=X_scaled[:, 0], y=X_scaled[:, 1], hue=kmeans_labels, palette='viridis', s=50)
- x=X_scaled[:, 0]
- x축 값을 설정하는 코드예요 [:, 0]로 범위를 설정해 주었어요
- y=X_scaled[:, 1]
- y축 값을 설정하는 코드예요 [:, 1]로 범위를 설정해 주었어요
- x=X_scaled[:, 0]
요약
- 연관성 분석
- CustomerID & Spending Score(1-100)(==소비 점수)
- Annual Income(k$)(==연간 소득) & Spending Score(1-100)
- 이 두 자리 조합으로 군집 수를 확인할 수 있었음
- pairplot 그래프
- 각 칼럼마다의 관계를 그래프로 표현하여 데이터 분석에 용이하였음
- 군집 수가 몇 개인지 한눈에 알아볼 수 있었던 그래프
- 2D를 통한 결과 시각화
- 색상별로 군집이 어떻게 분포되어 있는지 확인할 수 있음
결과
고객 세분화 분석을 해보았을 때, 세분화는 총 5가지로 분류됨을 알 수 있음
'과제' 카테고리의 다른 글
[머신러닝_지도학습] 주택 가격 예측 (0) | 2024.12.23 |
---|