Python(Colab) KMeans + 실루엣 기법 / 클러스터링
2023. 6. 18. 18:00ㆍ파이썬/머신러닝 및 딥러닝
데이터 분석의 적용시켜보기
1.데이터 셋
mkt_df = pd.read_csv('/content/drive/MyDrive/KDT-1/머신러닝과 딥러닝/marketing.csv')
mkt_df

2. 데이터 셋 설명
목표: 고객 등급을 자체적으로 나눠, 그에 맞는 혜택 적용 등 마케팅 전략 세우기
3. 데이터 전처리하기 1) 아이디 삭제
mkt_df.drop('ID',axis=1,inplace=True)
2) 생일 데이터에서 1900년도 이전 사람 지우기
mkt_df.sort_values('Year_Birth')

mkt_df = mkt_df[mkt_df['Year_Birth'] > 1900]
3) 소득에서 이상치인 66666 날리기
mkt_df.sort_values('Income',ascending=False)
mkt_df = mkt_df[mkt_df['Income'] != 666666]
4) 회원 가입일 타입을 바꾸기 (datetime)
mkt_df['Dt_Customer'] = pd.to_datetime(mkt_df['Dt_Customer'])
5) 육류제품,어류제품,단맛제품,금제품 구매액을 total_mnt라는 파생변수로 한번에 저장
# MntWines MntFruits MntMeatProducts MntFishProducts MntSweetProducts MntGoldProds 다 합치기
mkt_df['total_mnt'] = mkt_df['MntWines'] + mkt_df['MntFruits'] + mkt_df['MntMeatProducts'] + mkt_df['MntFishProducts'] + mkt_df['MntSweetProducts'] + mkt_df['MntGoldProds']
6) 어린이 수와 청소년 수를 합해서 Children 이라는 파생변수 만들기
#같은 방법
mkt_df['Children'] = mkt_df['Kidhome'] + mkt_df['Teenhome']
mkt_df['Children'] = mkt_df[['Kidhome','Teenhome']].sum(axis=1)
7) 결혼여부를 single과 partner 두가지로 정리하기
mkt_df['Marital_Status'] = mkt_df['Marital_Status'].replace({'Married':'Partner','Together':'Partner','Single':'Single',
'Divorced':'Single','Widow':'Single','Alone':'Single',
'Absurd':'Single','YOLO':'Single'})
mkt_df['Marital_Status'].value_counts()

8) 결혼여부와 학력을 원 핫 인코딩 하기
mkt_df = pd.get_dummies(mkt_df,columns=['Education','Marital_Status'])
9) 🟡스케일링하기
✔️ 스케일링(Scaling)
* 데이터를 특정한 스케일로 통일 하는 것
* 데이터를 모델링 전에 거치는 것이 좋다.
* 다차원의 값들을 비교 분석하기 쉽게 만들어준다
* 자료의 overflow,underflow를 방지한다
* 따라서 최적화 과정에서 안정성과 수렴 속도를 향상
✔️종류
1. StandardScaler : 평균과 표준편차를 사용
2. MinMaxScaler: 최대/최소값이 1과 0이 되도록 하는 것
3. RobustScaler: 중앙값과 IQR(4분위 수)사용 / 아웃라이어의 영향을 최소화
스케일링 적용하기
1.StandardScaler
from sklearn.preprocessing import StandardScaler, MinMaxScaler,RobustScaler
ss = StandardScaler()
ss.fit_transform(mkt_df)
ss_df = pd.DataFrame(ss.fit_transform(mkt_df),columns=mkt_df.columns)
ss_df

2.MinMaxScaler
from sklearn.preprocessing import StandardScaler, MinMaxScaler,RobustScaler
mm = MinMaxScaler()
mm_df =pd.DataFrame(mm.fit_transform(mkt_df),columns=mkt_df.columns)
mm_df

3.RobustScaler
from sklearn.preprocessing import StandardScaler, MinMaxScaler,RobustScaler
rs = RobustScaler()
rs_df =pd.DataFrame(rs.fit_transform(mkt_df),columns=mkt_df.columns)
rs_df

실루엣 스코어적용하기
from sklearn.metrics import silhouette_score
score = []
for i in range(2,11):
km = KMeans(n_clusters=i,random_state=10)
km.fit(mm_df)
pred = km.predict(mm_df)
score.append(silhouette_score(mm_df,pred))
score
# 이것은 스코어값이 높으면 높을 수록 좋다.
sns.lineplot(x=range(2,11),y=score)

728x90
'파이썬 > 머신러닝 및 딥러닝' 카테고리의 다른 글
Python(Colab) 파이토치(Pytorch) + 단항 선형회귀 해보기 (0) | 2023.06.18 |
---|---|
Python(Colab) 파이토치(Pytorch) (0) | 2023.06.18 |
Python(Colab) KMeans / 클러스터링 (0) | 2023.06.17 |
Python(Colab) lightGBM (0) | 2023.06.17 |
Python(Colab) 랜덤 포레스트 (Random Forest) (0) | 2023.06.16 |