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) 사용 -> 가능한 조합 중 가장 우수한 조합 찾음
시간이 오래 걸림