작업형 2유형은 2가지로 나뉜다.
분류 / 회귀 는 아래와 같다
유형 | 종속변수(목표변수)가 무엇? | 성능평가 |
분류 | 남,여 / 생존,사망 | accuracy_score, fi_score, ROC_AUC_Score,confusion_metrics 등 |
회귀 | 수치형 / 가격 | RMSE, 결정계수 등 |
문제에서 주어진 종속변수 형태 보고 우리모델의 성가지표를 보고 어떤 모델을 쓸 지 확인하고 모델을 선택해야함.
작업형 2유형 전체순서
1.데이터 로드 및 확인
2.결측값 또는 라벨인코딩(문자열->수치형으로 변경)
3. 모델링 및 학습
4. 모델의 성능평가
5. 테스트 모델 예측
6. 테스트 결과 제출 및 확인
빅데이터분석기사 실기 체험환경
https://dataq.goorm.io/exam/3/%EC%B2%B4%ED%97%98%ED%95%98%EA%B8%B0/quiz/1
여기서 보면
이렇게 문제가 출제되는것을 볼 수 있다.
일단 첫번째 하이라이트를 보면서 성별을 예측하는것 이라고 적혀있기때문에 분류모델이라는것을 알 수있고
평가지표에 따라 평가하는 ROC_AUC를보고 한번 더 확신할 수 있습니다.
TRAIN 데이터셋에는 성별이 있는것으 로학인할 수 있고
TEST 데이터셋에는 성별이 없는것을 확인할 수 있습니다.
목표변수를 찾아야하니까요!
# 출력을 원하실 경우 print() 함수 활용
# 예시) print(df.head())
# getcwd(), chdir() 등 작업 폴더 설정 불필요
# 파일 경로 상 내부 드라이브 경로(C: 등) 접근 불가
import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
#데이터로드 및 확인
#print(train.info()) #결측값처리(환불금액, 라벨인코:주구매상품, 주구매지정)
#print(test.info())
##결측값처리 (대체 : 최빈값)
train.fillna(train['환불금액'].mode()[0], inplace=True)
test.fillna(test['환불금액'].mode()[0], inplace=True)
#print(train.info())
#print(test.info())
#라벨인코딩 (train, test)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
train['주구매상품'] = le.fit_transform(train['주구매상품'])
train['주구매지점'] = le.fit_transform(train['주구매지점'])
test['주구매상품'] = le.fit_transform(test['주구매상품'])
test['주구매지점'] = le.fit_transform(test['주구매지점'])
print(train.info())
print(test.info())
#데이터 분할
from sklearn.model_selection import train_test_split
X = train.drop(columns=['성별', '회원ID'])
y = train['성별']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state=2024)
#모델링
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators=150, max_depth=20, random_state=2024 )
rfc.fit(X_train, y_train)
pred1 = rfc.predict(X_test) #pred1 : train데이터에 대한 예측값
#성능평가
from sklearn.metrics import roc_auc_score, accuracy_score
roc = roc_auc_score(y_test, pred1)
acc = accuracy_score(y_test, pred1)
print('roc', roc) # 0.6023
print('acc', acc) # 0.6642
#테스트결과예측
test_X = test.drop(columns=['회원ID'])
pred2 = rfc.predict(test_X)
print(pred2) # [1 0 0 0... 0 0 0]
#결과 데이터 제출 및 확인
pd.DataFrame({'pred': pred2}).to_csv('result.csv',index=False)
#저장데이터 확인
result = pd.read_csv('result.csv')
#print(result)
EDA
순번 | 역할 | 사용방법 | 비고 |
1 | 상위 5개 데이터 | X_train.head() | |
2 | 하위 5개 데이터 | X_train.tail() | |
3 | 데이터 샘플(랜덤) | X_train.random() | 괄호 안에 숫자를 쓰면 그 수만큼 보여줌 |
4 | 데이터 크기확인 | X_train.shape | !괄호 없음! |
5 | 데이터 타입 | X_train.info() | |
6 | 수치형 컬럼 통계값 확인 | X_traion.describe() | |
7 | 범주형 컬럼 통계값 확인 | X_train.describe(include='object') | include='O' or include'object' |
8 | target(label)별 개수 확인 | y_train['income'].value_counts() | |
9 | 상관관계 | X_train.corr(numeric_only=True) | 판다스 업데이트에 따라 corr.(numeric_only =True)해줘야함 |
주어진 데이터 합치기, 분리
순번 | 역할 | 사용방법 | 비고 |
1 | X_train, y_train합치는 것 예시 | df = pd.concat([X_train, y_train['income']], axis=1) df.shape |
소괄호안에 x,y를 넣어주면 됩니다. 축을 정해야하는데 안정해주면 아래 위로 붙음 |
2 | train분리 예시 | X_tr = train.iloc[:,:-1].copy() y_tr = train.iloc[:,[0,-1]].copy() X_tr.shape, y_tr.shape |
iloc활용, copy()는 사본을 의미함 안쓰면 워닝이 뜰수도있음. |
'자격증 > [빅분기] 빅데이터분석기사' 카테고리의 다른 글
[작업형3] 가설검정 (0) | 2024.10.28 |
---|---|
[작업형2] 'tuple' object is not callable (0) | 2024.10.13 |
[작업형2] 머신러닝+시험파일제출 +풀이과정 (0) | 2024.10.11 |
[작업형1] TypeError: unsupported operand type(s) for +: 'NoneType' and 'NoneType' (1) | 2024.10.10 |
[작업형1] TypeError: agg function failed [how->mean,dtype->object]간단하게 numeric_only=True 쓰세요 (0) | 2024.10.09 |