빅데이터분석기사 실기 대비 [작업형 3] 문법 정리

jihyelee·2024년 6월 17일
0

bigdata

목록 보기
3/4

시험 준비

빅데이터 분석기사 실기 준비를 하면서, 시험 직전에 볼 간단한 문법 정리집이 필요했다.
실제 시험 준비는 많은 분들처럼 캐글 놀이터를 활용했는데, 나같은 경우는

  • python은 익숙하지만 pandas는 낯설어서 정답을 따라서 손코딩을 해보고
  • 학습한 내용을 바탕으로 직접 문제를 풀어보는 식으로 공부했다.

작업형 2 유형의 경우 학습을 시켜 성능을 올리는 것도 중요하지만 개인적으로는

  • 어떤 피처를 선택해서 학습할지
  • 범주형 데이터는 어떻게 처리할지
  • 결측치 처리는 어떻게 할지와 같은 데이터 전처리가 중요하다고 느꼈다.

제 8회 실기의 경우 데이터 전처리도 비교적 간단했고, 모델 성능도

EDA (데이터 분석)

  • 데이터 상위 5개 확인
    • df.head()
  • 데이터 정보 확인
    • df.info()
    • null 개수, 데이터 타입 등 확인 가능
  • 데이터 결측값 개수 확인
    • df.isnull().sum()
  • 특정 컬럼의 값 개수
    • df[컬럼].value_counts()
    • 타겟(=레이블)의 수를 파악하는 데에 유용
  • 데이터 최소, 최대, 사분위값 등 확인
    • df.describe()
  • 데이터 값을 꺼내 별도 저장
    • df2 = df.pop(컬럼)
    • 예를 들어 학습 데이터에 정답 레이블이 함께 포함되어 있는 경우, 이를 통해 학습할 피처와 정답 레이블을 분리할 수 있음

데이터 전처리

  • 학습, 테스트 데이터셋 나누기
    • from sklearn.model_selection import train_test_split
    • x_train, x_test = train_test_split(df, test_size=0.2, random_state=2024)
    • 학습을 진행하고 오버피팅이 되어 있지는 않은지, 학습이 잘 되었는지 검증하는 용도로 유용

범주형 데이터 처리

  • pd.get_dummies(df)
    • 범주형 데이터를 0, 1의 수치형 데이터로 변환
    • 사실상 원핫인코딩을 한다고 볼 수 있음
    • 데이터 프레임 전체에 대해 한 번에 진행할 수도 있고, 특정 컬럼에 대해서 진행할 수도 있음
  • LabelEncoder().fit_transform(df[컬럼])
    • 범주형 데이터를 수치형 데이터로 변환
    • from sklearn.preprocessing import LabelEncoder
    • 여러 범주형 데이터 컬럼을 처리하고 싶다면, for loop으로 하나씩 처리해줘야 함

범주형 데이터 제외

  • 범주형 데이터 제외
    • df = df.select_dtypes(exclude=['object'])

이상치 제거

  • del_idx = X_train[조건문].index
  • X_train = X_train.drop(index=del_idx, axis=0)
    • axis=0일 경우 행 데이터 삭제
    • axis=1일 경우 열 데이터 삭제
    • 행을 기준으로 데이터를 삭제할 경우, 인풋(X_train)과 아웃풋(y_train)을 모두 삭제해야 함에 유의

이상치 대체 (평균)

  • mean_val = X_train[컬럼].mean()
  • X_train.loc[:, 컬럼].replace('이전 값', mean_val(='대체할 값'), inplace=True)
    • X_train[컬럼] = X_train[컬럼].replace('이전 값', '대체할 값')으로 작성해도 무방

결측치 대체

  • 최빈값과 차이가 크면 최빈값으로, 값이 비슷하면 별도의 값으로 대체할 수 있음
  • df[컬럼].fillna(df[컬럼].mode()[0])
  • SimpleImputer 사용 가능
    • from sklearn.impute import SimpleImputer
    • X_train = SimpleImputer().fit_transform(X_train)
    • X_test = SimpleImputer().transform(X_test)
    • fit은 학습, transform은 변환 과정이므로 학습 데이터에 대해서만 fit을 수행하고 테스트 데이터에서는 fit을 수행하지 않음에 유의

스케일링

  • StandardSclaer
    • from sklearn.preprocessing import StandardScaler
    • sclaer = StandardScaler()
    • X_train = scaler.fit_transform(X_train)
      • X_test의 경우 transform을 해주면 됨 (fit = 학습이므로 필요 없음)
    • 평균 0, 분산 1로 표준화
  • MinMaxScaler
    • from sklearn.preprocessing import MinMaxScaler
    • 사용 방법은 StandardScaler와 동일

알고리즘

어떤 모델이 있는지 정도만 숙지하고, 자세한 사용법은 시험 현장에서 help, dir를 통해 확인 후 사용

분류모델

  • RandomForestClassifier
    • from sklearn.ensemble import RandomForestClassifier
    • model = RandomForestClassifier(n_estimators=N, max_depth=N, random_state=2024)
    • n_estimator는 나무(tree)의 개수, max_depth는 나무의 깊이
    • random_state는 결과의 재현을 위해 랜덤 시드를 고정한 것으로, 임의의 값을 사용하면 됨
  • SVC
    • from sklearn.svm import SVC
    • model = SVC(random_state=2024)
  • DecisionTreeClassifier
    • from sklearn.tree import DecisionTreeClassifier
    • model = DecisionTreeClassifier(random_state=2024)

회귀모델

  • RandomForestRegressor
    • from sklearn.ensemble import RandomForestRegressor
    • model = RandomForestRegressor()
  • XGBRegressor
    • from xgboost import XGBRegressor
    • model = XGBRegressor()
  • LinearRegression
    • from sklearn.linear_model import LinearRegression
    • model = LinearRegression()

학습

  • model.fit(X_train, y_train)
    • 학습 시 y_train의 값은 타겟값만 남겨놔야 함 (다른 컬럼은 삭제)
    • 학습 시 X_train의 값은 학습에 사용할 피처만 남겨놔야 함

평가

  • predictions = model.predict(X_test)
    • 평가 시 X_test의 값은 사용할 피처만 남겨놔야 함
  • mean_accuracy = model.score(X_train, y_train)
    • 분류 모델의 경우 평균 정확도
    • 학습 데이터셋의 평균 정확도가 너무 높다면 오버피팅의 가능성

분류 평가지표

  • accuracy
    • 높을수록 좋은 성능
    • from sklearn.metrics import accuracy_score
    • accuracy_score(정답, 예측)
  • ROC-AUC
    • 값이 클수록 좋은 성능
    • from sklearn.metrics import roc_auc_score
    • roc_auc_score(정답, 예측)
    • binary classification의 경우, predict_proba 함수를 통해 예측한 값의 [:,1]을 사용할 수 있음

회귀 평가지표

  • RMSE
    • 낮을수록 좋은 성능
    • from sklearn.metrics import mean_squared_error
    • np.sqrt(mean_squared_error(정답, 예측))
  • R2
    • 클수록 좋은 성능
    • from sklearn.metrics import r2_score
    • r2_score(정답, 예측)

결과 제출하기

해당 예시코드는 시험 문제에서도 주어짐
아래는 단순 참고용

  • output = pd.DataFrame({'column1': X_test.column, 'column2': predictions})
  • output.to_csv('파일명', index=False)
profile
Graduate student at Seoul National University, majoring in Artificial Intelligence (NLP). Currently AI Researcher and Engineer at LG CNS AI Lab

0개의 댓글