본문 바로가기

자격증공부/빅데이터분석기사

[빅데이터분석기사][작업형2] 4회 기출문제 풀이 (분류, 2개 데이터set)

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
반응형