320x100
* 퇴근후딴짓 님의 강의를 참고하였습니다. *
[문제] 자동치 시장 세분화 (분류)
자동차 회사는 새로운 전략을 수립하기 위해 4개의 시장으로 세분화하였습니다. 기존 고객 분류 자료를 바탕으로 신규 고객이 어떤 분류에 속할지 예측해주세요.
ㅇ 예측할 값 : "Segmentation" (1,2,3,4)
ㅇ 평가 : Macro f1-score
ㅇ data : train.csv, test.csv
ㅇ 제출형식 : ID, 값
1. 라이브러리 및 데이터 읽어오기
# 라이브러리 불러오기
import pandas as pd
# 데이터 불러오기
train = pd.read_csv("train.csv")
test = pd.read_csv("test.csv")
2. EDA
# 데이터 크기 확인
train.shape, test.shape
# train 샘플 확인
train.head()
# test 샘플 확인
test.head()
# target 확인
train['Segmentation'].value_counts()
# 결측치 확인(train)
train.isnull().sum()
# 결측치 확인(test)
test.isnull().sum()
# type 확인
train.info()
320x100
<초보 case> : 수치형 데이터만 학습해서 test데이터 예측하기
## 데이터전처리 ##
# target(y, label) 값 복사
target = train.pop('Segmentation')
target
# test데이터 ID 복사
test_ID = test.pop('ID')
# 수치형 컬럼(train)
# ['ID', 'Age', 'Work_Experience', 'Family_Size', 'Segmentation']
num_cols = ['Age', 'Work_Experience', 'Family_Size']
train = train[num_cols]
train.head(2)
# 수치형 컬럼(test)
test = test[num_cols]
test.head(2)
## 모델선택 및 학습 ##
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(train, target)
pred = rf.predict(test)
pred
# 예측결과를 데이터프레임으로 출력
sbumit = pd.DataFrame({
'ID' = test_ID,
'Segmentation' : pred
})
# CSV파일로 제출
submit.to_csv('submission.csv', index=False)
반응형
<중급 case> : 수치형 + 범주형 데이터 모두 활용
## 데이터 전처리 ##
# 범주형 데이터는 원핫 인코딩
# 원핫 인코딩
train = pd.get_dummies(train)
test = pd.get_dummies(test)
# type 확인
train.info()
# target(y, label) 값 복사
target = train.pop('Segmentation')
target
train = train.drop("ID", axis=1)
train.head(1)
# test데이터 ID 복사
test_ID = test.pop('ID')
test_ID
## 모델학습 및 예측 ##
# 모델 선택 및 학습
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(train, target)
pred = rf.predict(test)
pred
# 예측 결과 -> 데이터 프레임
# pd.DataFrame({'cust_id': X_test.cust_id, 'gender': pred}).to_csv('003000000.csv', index=False)
submit = pd.DataFrame({
'ID': test_ID,
'Segmentation': pred
})
submit.to_csv("submission.csv", index=False)
# Score: 0.30381
<고급 Case> : 교차검증 및 평가 후 제출하기
# 범주형 변수
# train.select_dtypes(include='object').columns
# ['Gender', 'Ever_Married', 'Graduated', 'Profession', 'Spending_Score','Var_1']
cat_cols = ['Gender', 'Ever_Married', 'Graduated', 'Profession', 'Spending_Score','Var_1']
## label encoding
## Series.astype('category').cat.codes
train['Gender'] = train['Gender'].astype('category').cat.codes
train['Ever_Married'] = train['Ever_Married'].astype('category').cat.codes
train['Graduated'] = train['Graduated'].astype('category').cat.codes
train['Profession'] = train['Profession'].astype('category').cat.codes
train['Spending_Score'] = train['Spending_Score'].astype('category').cat.codes
train['Var_1'] = train['Var_1'].astype('category').cat.codes
train
## cat.codes의 label 인코딩은 ABC 순대로 되는 것을 확인할 수 있다
test['Profession'].astype('category').cat.categories
## label encoding
test['Gender'] = test['Gender'].astype('category').cat.codes
test['Ever_Married'] = test['Ever_Married'].astype('category').cat.codes
test['Graduated'] = test['Graduated'].astype('category').cat.codes
test['Profession'] = test['Profession'].astype('category').cat.codes
test['Spending_Score'] = test['Spending_Score'].astype('category').cat.codes
test['Var_1'] = test['Var_1'].astype('category').cat.codes
test
# ID, target 처리
target = train.pop('Segmentation')
train = train.drop("ID", axis=1)
test_ID = test.pop('ID')
# 모델 선택
# 하이퍼파라미터 튜닝: max_depth, n_estimators
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0, max_depth=7, n_estimators=500)
# 학습
rf.fit(train, target)
pred = rf.predict(test)
pred
# 예측 결과 -> 데이터 프레임
# pd.DataFrame({'cust_id': X_test.cust_id, 'gender': pred}).to_csv('003000000.csv', index=False)
submit = pd.DataFrame({
'ID': test_ID,
'Segmentation': pred
})
submit.to_csv("submission.csv", index=False)
# Score: 0.32046
320x100
반응형
'자격증공부 > 빅데이터분석기사' 카테고리의 다른 글
[빅데이터분석기사][작업형2] 5회 기출문제 풀이(회귀) (0) | 2023.06.22 |
---|---|
[빅데이터분석기사][작업형1] 4회 기출문제 풀이(기초통계, 날짜) (0) | 2023.06.22 |
[빅데이터분석기사][작업형3] 예시문제 (쌍체표본 t-검정) (0) | 2023.06.19 |
[빅데이터분석기사][유형2] 문제유형 풀어보기(다항분류) (0) | 2023.06.18 |
[빅데이터분석기사][작업형1] 5회 기출문제 풀이(기초통계, 정렬) (0) | 2023.06.17 |