빅데이터분석기사/코드

[빅데이터분석기사] 실기 4회 2유형 풀이(Python)

EveningPrimrose 2023. 6. 17. 14:45
반응형

자동차 시장 세분화

 - 자동차 회사는 새로운 전략을 수립하기 위해 4개의 시장으로 세분화했습니다.

 - 기존 고객 분류 자료를 바탕으로 신규 고객이 어떤 분류에 속할지 예측해주세요!

 - 예측할 값(y) : "Segmentation" (1, 2, 3, 4)

 - 평가 : Macro f1-score

 - data : train.csv, test.csv

 - 제출형식

 

답안 제출 참고

 - 아래 코드 예측변수와 수험번호를 개인별로 변경하여 활용

 - pd.DataFrame({'ID' : test.ID, 'Segmentation' : pred})).to_csv('003000000.csv', index=False)

 

노트북 구분

 - basic : 수치형 데이터만 활용 -> 학습 및 test 데이터 예측

 - intermediate : 범주형 데이터도 활용 -> 학습 및 test 데이터 예측

 - advanced : 학습 및 교차 검증(모델 평가) -> 하이퍼파라미터 튜닝 -> test 데이터 예측

 

# basic 노트북

# 라이브러리 불러오기
import pandas as pd

# 데이터 불러오기
train = pd.read_csv("../input/big-data-analytics-certification-kr-2022/train.csv")
test = pd.read_csv("../input/big-data-analytics-certification-kr-2022/test.csv")

# EDA
# 데이터 크기 확인
train.shape, test.shape

# 데이터 샘플 확인
train.head()
test.head()

# target 확인
train['Segmentation'].value_counts()

# 결측치 확인
train.isnull().sum()
test.isnull().sum()

# type 확인
train.info()

# 전처리
# target(y, label) 값 복사
target = train.pop('Segmentation')

# test 데이터 ID 복사
test_ID = test.pop('ID')

# 수치형 컬럼(train)
num_cols = ['Age', 'Work_Experience', 'Family_Size']
train = train[num_cols]

# 수치형 컬럼(test)
test = test[num_cols]

# model 학습 및 예측
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state = 0)
rf.fit(train, target)
pred = rf.predict(test)

# 예측 결과 -> 데이터 프레임
# 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

submit.to_csv("submission.csv", index=False)
# Score : 0.30477
# intermediate 노트북

# 라이브러리 불러오기
import pandas as pd

# 데이터 불러오기
train = pd.read_csv("../input/big-data-analytics-certification-kr-2022/train.csv")
test = pd.read_csv("../input/big-data-analytics-certification-kr-2022/test.csv")

# EDA
# train 샘플 확인
train.head()
train.info()
train.describe(include="O")

# 전처리
# 원핫인코딩
train = pd.get_dummies(train)
test = pd.get_dummies(test)

# type 확인
train.info()

# target(y, label) 값 복사
target = train.pop('Segmentation')

# test 데이터 ID 복사
test_ID = test.pop('ID')

# 모델 선택 및 학습
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(train, target)
pred = rf.predict(test)

# 예측 결과 -> 데이터 프레임
# 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
# advanced 노트북

# 데이터 불러오기
train = pd.read_csv("../input/big-data-analytics-certification-kr-2022/train.csv")
test = pd.read_csv("../input/big-data-analytics-certification-kr-2022/test.csv")

# 범주형 변수
# train.select_dtype(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

# cat.codes의 label 인코딩은 ABC 순대로 되는 것을 확인할 수 있다
test['Profession'].astype('category').cat.categories

Index(['Artist', 'Doctor', 'Engineer', 'Entertainment', 'Executive',
		'Healthcare', 'Homemaker', 'Lawyer', 'Marketing'],
      	dtype='object')
        
# 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

# 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)

# 교차 검증
from sklearn.model_selection import cross_val_score
scores = cross_val_score(rf, train, target, scoring='f1_macro', cv=5)
print(scores)
print(scores.mean())

# 학습
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

 

반응형