본문 바로가기
IT&게임/빅데이터분석기사(빅분기)

빅분기 작업형2 기출 정리

by 푸루루 2024. 6. 18.
728x90
반응형

 

※ 본 내용은 퇴근후딴짓 강의를 학습하며 참고하여 작성된 내용입니다.

 

이진분류(기출3회)

# 1. 문제정의
# 평가: roc-auc
# target: TravelInsurance
# 최종파일: result.csv(컬럼 1개 pred, 1확률값)

# 2. 라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("3_train.csv")
test = pd.read_csv("3_test.csv")

# 3. 탐색적 데이터 분석(EDA)
# 우리가 예측해야하는것도 491개라는걸 기억하
print("===== 데이터 크기 =====")
print("Train Shape:", train.shape)
print("Test Shape:", test.shape)

print("===== train 데이터 샘플 =====")
print(train.head(1))

print("===== test 데이터 샘플 =====")
print(test.head(1))

print("===== 데이터 정보(자료형) =====")
print(train.info())

print("===== train 결측치 수 =====")
print(train.isnull().sum().sum())

print("===== test 결측치 수 =====")
print(test.isnull().sum().sum())

print("===== target 빈도 =====")
print(train['TravelInsurance'].value_counts())
 

object가 있다는 것은 인코딩을 해야한다는 말임

결측치는 없음

train = pd.read_csv("3_train.csv")
test = pd.read_csv("3_test.csv")

# 4. 데이터 전처리
print(train.shape, test.shape)
train = pd.get_dummies(train)
test = pd.get_dummies(test)
print(train.shape, test.shape)

# 5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
target = train.pop('TravelInsurance')
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)

print("\n ===== 분할된 데이터 크기 =====")
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict_proba(X_val)

from sklearn.metrics import roc_auc_score
roc_auc = roc_auc_score(y_val, pred[:,1])
print('\n roc_auc:', roc_auc)

# 7. 예측 및 결과 파일 생성
pred = rf.predict_proba(test)
print(pred[:3])
submit = pd.DataFrame({'pred':pred[:,1]})
submit.to_csv("result.csv", index=False)

# 제출파일 확인
print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").head())

print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
 

타겟은 가급적 pop을 하자 !

모델은 RandomForestClassifier을 동일하게 사용한다.

ROC-AUC를 물어보면 무조건 predict_proba임

예측은 마지막에 test를 제출해야함 !

제출 시 index = False

마지막에는 제출파일을 출력해보고, shape도 확인해 볼 것

# ID를 같이내는 추세였짐나 요새는 PRED만 내고있음 (ID가 있을때는 크기가 달라서 오류가 나면 잘못냈다는걸 알 수 있었음)

 

응용

# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)

# f1 스코어
from sklearn.metrics import f1_score
print(f1_score(y_val, pred))

# 7. 예측 및 결과 파일 생성
pred = rf.predict(test)
print(pred[:3])
submit = pd.DataFrame({'pred':pred})
submit.to_csv("result.csv", index=False)

# 제출파일 확인
print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").head())

print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
 

다중분류(기출4회)

 

# 1. 문제정의
# 평가: f1 macro
# target: Segmentation
# 최종파일: result.csv(컬럼 1개 pred)

# 2. 라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("4_train.csv")
test = pd.read_csv("4_test.csv")

# 3. 탐색적 데이터 분석(EDA)
print("===== 데이터 크기 =====")
print("Train Shape:", train.shape)
print("Test Shape:", test.shape)
print("\n") # 줄 바꿈

print("===== 데이터 정보(자료형) =====")
print(train.info())
print("\n")

print("===== train 결측치 수 =====")
print(train.isnull().sum().sum())
print("\n")

print("===== test 결측치 수 =====")
print(test.isnull().sum().sum())
print("\n")

print("===== target 빈도 =====")
print(train['Segmentation'].value_counts())
 

object가 있으니 범주 처리를 해야겠군 => 원핫인코

pop을 할때는 int이면 밑에서해도 되지만, 문자이면

원핫인코딩하기 전에 해줘라!! (원핫인코딩이랑 같이 될 수 도 있음)

train = pd.read_csv("4_train.csv")
test = pd.read_csv("4_test.csv")

# 4. 데이터 전처리
# 원핫인코딩 (target컬럼이 object형이라 제외)
target = train.pop('Segmentation')

train = pd.get_dummies(train)
test = pd.get_dummies(test)

# 5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)

print("\n ===== 분할된 데이터 크기 =====")
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)

from sklearn.metrics import f1_score
f1 = f1_score(y_val, pred, average='macro')
print('\n f1-macro:', f1)

# 7. 예측 및 결과 파일 생성
pred = rf.predict(test)
submit = pd.DataFrame({'pred':pred})
submit.to_csv("result.csv", index=False)

# 제출파일 확인
print("\n ===== 제출파일 (샘플 5개) =====")
print(pd.read_csv("result.csv").head())

print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
 

회귀(기출5회)

# 1. 문제정의
# 평가: RMSE
# target: price
# 최종파일: result.csv(컬럼 1개 pred)

# 2. 라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("5_train.csv")
test = pd.read_csv("5_test.csv")

# 3. 탐색적 데이터 분석(EDA)
print("===== 데이터 크기 =====")
print("Train Shape:", train.shape)
print("Test Shape:", test.shape)

print("\n ===== 데이터 정보(자료형) =====")
print(train.info())

print("\n ===== train 결측치 수 =====")
print(train.isnull().sum().sum())

print("\n ===== test 결측치 수 =====")
print(test.isnull().sum().sum())

print("\n ===== 카테고리 비교 =====")
print(train.describe(include='O'))
print(test.describe(include='O'))

# 각 컬럼별 카테고리 확인 및 비교 (3개중 1개만 샘플)
print(train['fuelType'].value_counts())
print(test['fuelType'].value_counts())

print("\n ===== target 기술 통계 =====")
# 수치형 데이터이므로
print(train['price'].describe())
 

응용(난 안 할꺼임)

print("\n ===== 카테고리 비교 =====")
cols = train.select_dtypes(include='object').columns

for col in cols:
    set_train = set(train[col])
    set_test= set(test[col])
    same = (set_train == set_test)
    if same:
        print(col, "\t카테고리 동일함")
    else:
        print(col, "\t카테고리 동일하지 않음")
 
train = pd.read_csv("5_train.csv")
test = pd.read_csv("5_test.csv")

# 4. 데이터 전처리
target = train.pop('price')
# 원핫인코딩
train = pd.get_dummies(train)
test = pd.get_dummies(test)

# 5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)

print("\n ===== 분할된 데이터 크기 =====")
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)

# RMSE(Root Mean Squared Error)
from sklearn.metrics import mean_squared_error
def rmse(y_true, y_pred):
    mse = mean_squared_error(y_true, y_pred)
    return mse ** 0.5

result = rmse(y_val, pred)
print('\n rmse:', result)

# 7. 예측 및 결과 파일 생성
pred = rf.predict(test)
submit = pd.DataFrame({'pred':pred})
submit.to_csv("result.csv", index=False)

# 제출파일 확인
print("\n ===== 제출파일 (샘플 5개) =====")
print(pd.read_csv("result.csv").head())

print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
 

pop은 전처리 시작할때 바로 해버리자 !!

회귀모델이므로 Classifier 하면 안됨!!! Regressor(회귀모델)임

회귀모델은 predict!

RMSE 모르면 MSE라도 그냥 대충 해봐라 !!

오차는 작아질수록 좋은거임 !!!

 

다중분류(기출6회)

 

# 1. 문제정의
# 평가: f1 macro
# target: Heat_Load
# 최종파일: result.csv(컬럼 1개 pred)

# 2. 라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("6_train.csv")
test = pd.read_csv("6_test.csv")

# 3. 탐색적 데이터 분석(EDA)
print("===== 데이터 크기 =====")
print("Train Shape:", train.shape)
print("Test Shape:", test.shape)
print("\n") # 줄 바꿈

print("===== 데이터 정보(자료형) =====")
print(train.info())
print("\n")

print("===== train 결측치 수 =====")
print(train.isnull().sum().sum())
print("\n")

print("===== test 결측치 수 =====")
print(test.isnull().sum().sum())
print("\n")

print("===== target 빈도 =====")
print(train['Heat_Load'].value_counts())
 
train = pd.read_csv("6_train.csv")
test = pd.read_csv("6_test.csv")

# 4. 데이터 전처리
# 원핫인코딩 (target컬럼이 object형이라 제외)
target = train.pop('Heat_Load')

train = pd.get_dummies(train)
test = pd.get_dummies(test)

# 5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)

print("\n ===== 분할된 데이터 크기 =====")
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestClassifier
rf = RandomForestClassifier(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)

from sklearn.metrics import f1_score
f1 = f1_score(y_val, pred, average='macro')
print('\n f1-macro:', f1)

# 7. 예측 및 결과 파일 생성
pred = rf.predict(test)
submit = pd.DataFrame({'pred':pred})
submit.to_csv("result.csv", index=False)

# 제출파일 확인
print("\n ===== 제출파일 (샘플 5개) =====")
print(pd.read_csv("result.csv").head())

print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
 

회귀(기출7회)

# 1. 문제정의
# 평가: RMSE
# target: total
# 최종파일: result.csv(컬럼 1개 pred)

# 2. 라이브러리 및 데이터 불러오기
import pandas as pd
train = pd.read_csv("7_train.csv")
test = pd.read_csv("7_test.csv")

# 3. 탐색적 데이터 분석(EDA)
print("===== 데이터 크기 =====")
print("Train Shape:", train.shape)
print("Test Shape:", test.shape)

print("\n ===== 데이터 정보(자료형) =====")
print(train.info())

print("\n ===== train 결측치 수 =====")
print(train.isnull().sum().sum())

print("\n ===== test 결측치 수 =====")
print(test.isnull().sum().sum())

print("\n ===== 카테고리 비교 =====")
print(train.describe(include='O'))
print(test.describe(include='O'))

print("\n ===== target 기술 통계 =====")
print(train['total'].describe())

# 지수바꿀떄
pd.set_option('display.float_format', '{:.10f}'.format)
train['total'].describe()
 
train = pd.read_csv("7_train.csv")
test = pd.read_csv("7_test.csv")

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

# 5. 검증 데이터 분할
from sklearn.model_selection import train_test_split
target = train.pop('total')
X_tr, X_val, y_tr, y_val = train_test_split(train, target, test_size=0.2, random_state=0)

print("\n ===== 분할된 데이터 크기 =====")
print(X_tr.shape, X_val.shape, y_tr.shape, y_val.shape)

# 6. 머신러닝 학습 및 평가
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(random_state=0)
rf.fit(X_tr, y_tr)
pred = rf.predict(X_val)

# RMSE(Root Mean Squared Error)
from sklearn.metrics import mean_squared_error
def rmse(y_true, y_pred):
    mse = mean_squared_error(y_true, y_pred)
    return mse ** 0.5

result = rmse(y_val, pred)
print('\n rmse:', result)

# 7. 예측 및 결과 파일 생성
pred = rf.predict(test)
submit = pd.DataFrame({'pred':pred})
submit.to_csv("result.csv", index=False)

# 제출파일 확인
print("\n ===== 제출파일 (샘플 5개) =====")
print(pd.read_csv("result.csv").head())

print("\n ===== 제출파일 (샘플) =====")
print(pd.read_csv("result.csv").shape)
 

 

 

728x90

댓글