빅데이터 분석기사 실기 2유형

서준·2024년 6월 13일
0

2유형 코드 작성 순서

  1. 데이터 수집
  2. 데이터 정규화 - 훈련 데이터, 테스트 데이터 정규화
  3. 정답 데이터 지정 - 학습 데이터와 함께 해당 데이터 정답 지정
  4. 모델 생성 - RandomForest 사용
  5. 모델 훈련
  6. 모델 예측
  7. 정답 제출

종류

  1. 분류 - 목표변수가 카테고리로 나뉘어지는 결과(성공, 실패)
  • 성능평가 - accuracy_score, f1_score, roc_auc_score
  1. 회귀 - 목표변수가 수치형
  • 성능평가 - RMS, 결정계수

분류모델

1. .info() print

  • 결측값 확인
  • Object 변수 확인

2. 결측값 처리

train.fillna(train['환불금액'].mode()[0], inplace = True)
test.fillna(test['환불금액'].mode()[0], inplace = True)
  • .info() 다시 print해서 결측값 처리 되었는지 체크

3. Object 변수 라벨 인코딩

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['주구매지점'])
  • .info() 다시 print해서 정수형태로 변환되었는지 체크

4. 데이터 분할

  • 학습용 독립변수(X), 테스트용 독립변수(X), 학습용 종속변수(Y), 테스트용 종속변수(Y)
  • 데이터를 분할해서 써야한다
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)

5. 모델링

from sklearn.ensemble import RandomForestClassifier

rfc = RandomForestClassifier(n_estimators = 150, max_depth = 20, random_state = 2024)

6. 모델학습

rfc.fit(X_train, y_train)

7. 예측값 도출

pred1 = rfc.predict(X_test)

8. 성능평가

from sklearn.metrics import roc_auc_score, accuracy_score
roc = roc_auc_score(y_test, pred)
acc = accuracy_score(y_test, pred)
  • print 해서 roc, acc 지표 체크

9. 테스트 데이터 예측

test_X = test.drop(columns = ['회원ID'])
pred2 = rfc.predict(test_X)

10. 결과 데이터 제출 및 확인

pd.DataFrame({'pred' : pred2}).to_csv('result.csv', index = False)

회귀모델

문제
1. 전체 데이터 목록 4,009행 중 3,800행을 학습용 데이터로 사용하고, 나머지를 테스트 데이터로 사용할 수 있도록 데이터를 슬라이싱한다.
2. 학습용 데이터를 활용하여 모델을 모델링하고, 테스트 데이터를 적용하여 목표변수를(price) 예측하고, 예측결과를 제출한다. (단, 제출 결과는 테스트 데이터의 개수인 209행이 될 수 있도록 한다.)
3. 모델 평가 지표는 RMSE로 한다.
4. 모델 예측 결과는 price 컬럼을 갖고, 예측 결과를 나타내며, index는 표시하지 않는다.
5. 예측 결과 파일명은 다음과 같이 하여 제출한다. (파일명 : result.csv)

1. 데이터 확인

import pandas as pd

df = pd.read_csv('https://raw.githubusercontent.com/JEunJin/BigData_python/master/bigdata_csvfile/used_cars_price_data.csv')
print(df.info())
print(df.head())
  • info()를 통해 결측값을 확인하고, LabelEncoding할 항목 판별

2. 결측값 처리 - 최빈값 대체

df['fuel_type'].fillna(df['fuel_type'].mode()[0], inplace = True)
df['accident'].fillna(df['accident'].mode()[0], inplace = True)
df['clean_title'].fillna(df['clean_title'].mode()[0], inplace = True)
  • mode()[0] - 최빈값은 여러개일 수 있음

3. 라벨 인코딩

from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()

df['brand'] = le.fit_transform(df['brand'])
df['model'] = le.fit_transform(df['model'])
df['milage'] = le.fit_transform(df['milage'])
df['fuel_type'] = le.fit_transform(df['fuel_type'])
df['engine'] = le.fit_transform(df['engine'])
df['transmission'] = le.fit_transform(df['transmission'])
df['ext_col'] = le.fit_transform(df['ext_col'])
df['int_col'] = le.fit_transform(df['int_col'])
df['accident'] = le.fit_transform(df['accident'])
df['clean_title'] = le.fit_transform(df['clean_title'])
df['price'] = le.fit_transform(df['price'])

4. 데이터 분할

1) train-test 분할

# 트레인 3800, 테스트 209
train = df.iloc[:3800, :]
test = df.iloc[-209:, :]

2) 독립-종속 (X-y) 분할

from sklearn.model_selection import train_test_split

X = train.drop(columns = ['price'])
y = train['price']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 10)

5. 모델링

from sklearn.ensemble import RandomForestRegressor

rfr = RandomForestRegressor(n_estimators = 120, max_depth = 15, random_state = 10)
rfr.fit(X_train, y_train)
pred1 = rfr.predict(X_test)
  • random_state 는 동일하게 설정해야함

6. 성능평가

from sklearn.metrics import mean_squared_error
import numpy as np

mse = mean_squared_error(y_test, pred1)
rmse = np.sqrt(mse)
print(rmse)

7. 최종 결과 예측

test_X_data = test.drop(columns = ['price'])
pred2 = rfr.predict(test_X_data)

8. CSV 파일 저장

pd.DataFrame({'price' : pred2}).to_csv('result.csv', index = False)
result = pd.read_csv('result.csv')

9. 추가

  • 원-핫 인코딩 : 순서가 없는 범주형 변수
  • 라벨 인코딩 : 순서가 있는 범주형 변수
pd.get_dummies(df, columns = ['col1', 'col2']
profile
어린이입니다.

0개의 댓글