6/23 Today I Learned -1

boks·2024년 6월 23일
post-thumbnail

📖 학습한 내용

  • 경제적요인에 따른 조출생률 예측모델 생성 총정리
    • 모델 생성 및 데이터시트 작성

📖 핵심내용

📌 경제적요인에 따른 조출생률 예측모델 생성

1. 모델 생성

A. 스케일링

  • EDA 결과 이상치가 많고, 데이터간의 단위 편차가 심하다. 따라서 이상치에 영향을 잘 받지 않는 RobustScaler 선정

B. 모델 설계

그리드서치 및 함수 설정
  • 학습곡선을 출력하는 함수
  • 그리드서치를 하여, 최적의 파라미터, MSE, MAE, R2, CV_MAE 를 출력하고, 베스트모델을 반환하는 함수
  • 베스트모델과 랭킹을 입력받아서, 랭킹까지의 베스트모델의 피처를 사용하여 MSE, MAE, R2, CV_MAE 를 반환하는 함수

C. 랜덤포래스트, 디시전트리, XGBoost 사용

각각의 모델을 사용해서, 파라미터와 입력하는 피처를 조정하며 최상의 모델을 내었다.

E. 베이스라인

모델이 생성하는 MSE 값이 평균만 예측하는 모델보다 성능이 좋은지 확인

# 트레이닝 데이터의 평균값 계산
y_mean = y_train.mean()

# 베이스라인 모델의 예측 값 생성 (테스트 데이터에 대해)
y_pred_baseline = np.full_like(y_test, y_mean)

# 베이스라인 모델의 MSE 계산 (테스트 데이터에 대해)
mse_baseline = mean_squared_error(y_test, y_pred_baseline)
print(f"베이스라인 MSE: {mse_baseline}")

# 랜덤 포레스트 모델의 MSE 계산
mse_rfr = mean_squared_error(y_test, pred_rfr)
print(f"모델의 MSE: {mse_rfr}")

if mse_rfr > mse_baseline:
    print('망한 데이터')

📖 어려운 부분

코드 공유의 어려움

각자 코드 공유했는데, 변수때문에 어움을 겪었다. 서로 같지 않은 변수를 사용하면 코드의 모든 부분을 변경해야해서 시간이 오래걸리고, 실수로 인한 오류가 발생했다. 팀원들끼리 주석을 달고 변수명을 정확히하는 것에는 한계가 있었다.

  • 해결방안
    함수로 만들어서 변수의 명을 최대한 줄이려고했다. 또한 클래스를 이용하고, 모듈화를 사용해서 최대한 적은 변수가 하나의 페이지에 작동하도록 했다.

모델 실행 시간 예측 어려움

모델이 지정한 파라미터를 학습하는데에 얼만큼 걸릴지 예측하기 어려웠다. 코랩에서 런타임 끊기는 경울가 많아서 다시 해야하는 경우가 많아서 힘들었고, 로컬에서 2일아나 돌려도 되지 않는 경우가 많았다.

  • 정확도를 희생하더라도 경향을 파악하는 방식으로 진행했다.
    예를들면 디시전트리의 max_depth 의 값만 늘려가는 방식으로 어느 정도의 범위가 적정한 것인지 알아내는 방식으로 진행하였다.

📖 이후 학습 계획

  • 프로젝트 발표 자료준비
profile
설계엔지니어의 변신

0개의 댓글