본문 바로가기

Dacon 파이썬 프로젝트

1105 Lv2. 결측치 보간법과 랜덤포레스트로 따릉이 데이터 예측하기

2. Lv2. 결측치 보간법과 랜덤포레스트로 따릉이 데이터 예측하기

1. 전처리

(1) 파이썬 결측치 대체 평균

  df.fillna({'칼럼명':int(df['칼럼명'].mean)}, inplace=True)

  : 결측치 들을 각 피쳐의 평균값으로 대체하는 코드 

  [실습 코드]

  

(2) 파이썬 결측치 대체 보간법

  피쳐의 정보성을 강조하기 위한 보간법을 사용해 결측치 채우기 

  Lv.2 의 따릉이 데이터의 피쳐 : 기상정보, 시간 순서대로 
  -> 결측치들을 이전 행(직전 시간), 다음 행(직후시간)의 평균으로 보간하는 것이 합리적 

  df.interpolate(inplace =True)

  [실습 코드]

  

2. 모델링

(1) 파이썬 랜덤포레스트 개념, 선언

  랜덤 포레스트: 여러개의 의사결정나무를 만들어서 이들의 평균으로 예측의 성능을 높이는 방법
                -> 앙상블 기법(Ensemble)

  주어진 하나의 데이터로부터 여러 개의 랜덤 데이터 셋을 추출해 각 데이터 셋을 통해 모델을 여러 개 만들 수 있음.

  from sklearn.ensemble import RandomForestRegressor
  model = RandomForestRegressor()

(2) 파이썬 랜덤포레스트를 평가척도에 맞게 학습

  랜덤 포레스트 모듈의 옵션 중 criterion 옵션을 통해 어떤 평가 적도를 기준으로 훈련할 것인지 정할 수 있음

  따릉이 대회의 평가 지표 :  RMSE

  RMSE : MSE 평가지표에 루트를 씌운 것, 모델 선언 시 criterion='mse'

  model = RandomForestRegressor(criterion='mse')

  [실습코드]

 

3. 튜닝

(1) 파이썬 랜덤포레스트 변수중요도 확인

  fit() 으로 모델이 학습되고 나면 feature_importances_ 속성(attribute)로 변수의 중요도 파악 가능

  변수의 중요도 : 예측변수를 결정할 때 각 피쳐가 얼마나 중요한 역할을 하는 지에 대한 척도
  *변수의 중요도가 낮음 -> 해당 피쳐를 제거해 모델 성능을 높여야 함 

  model.feature_importances_

  [실습 코드]

  

(2) 파이썬 변수 제거

  변수 중요도가 낮은 피쳐를 하나씩 제거하면서 모델을 새로 훈련 가능

  1) id 피쳐는 예측 의미가 없음 -> id 와 count를 drop 한 X_train_1 훈련 df 생성
     *test 또한 동일하게 피쳐 드롭 한 test_1 df 생성

  2) hour_bef_windspeed 와 hour_bef_pm2.5 피쳐도 drop 하여 총 3 쌍의 X_train set 과 test set 생성

  3) 각 모델로 예측한 예측값들을 submission에 저장

  [실습 코드]

  

(3) 파이썬 하이퍼파라미터/ GridSearch 개념

  하이퍼파라미터 튜닝 : 정지 규칙 값들을 설정하는 것

  *의사결정나무의 정지규칙(stopping criteria)
        1) 최대깊이 (max_depth)
          : 최대로 내려갈 수 있는 깊이, 뿌리노드로 부터 내려갈수 있는 깊이 지정
            *작을 수록 트리도 작아짐

        2) 최소노드크기 (min_samples_split)
          : 노드를 분할하기 위한 데이터 수
           해당 노드에 이 값보다 적은 확률변수 수가 있다면 ,stop ->작을수록 트리 커짐

        3) 최소 향상도 (min_impurity_decrease)
          : 노드를 분할하기 위한 최소 향상도
           향상도가 설정값 이하이라면 더 이상 분할 하지 않음 ->작을 수록 트리 커짐

        4) 비용 복잡도 (Cost-complexity)
          : 트리가 커지는 것에 대해 패널티 계수를 설정해 불순도와 트리가 커지는 것에 대해 복잡도 계산

  GridSearch : 하이퍼파라미터 튜닝 방법 중 가장 좋은 성능의 방법
               완전 탐색(Exhausitive Search) 사용 -> 가능한 조합 중 가장 우수한 조합 찾음
               시간이 오래 걸림

(4) 파이썬 GridSearch 구현

    GridSearchCV 모듈로 완전탐색 하이퍼파라미터 튜닝 구현

    from sklearn.model_selection import GridSearchCV

    model = RandomForestRegression(criterion='mse', random_state=2020)

    params={'n_estimators':[200,300,500],
            'max_features':[5,6,8],
            'min_samples_leaf':[1,3,5]}

    greedy_CV = GridSearchCV(model,param_grid=params, cv=3, n_jobs=-1)
    greedy_CV.fit(X_train, Y_train)

    [실습 코드]

    

출처 : https://dacon.io/competitions/open/235698/talkboard/403693?page=1&dtype=recent