본문 바로가기

Data Diary

2021-06-24(태양열예측27)

반응형

빨간색 부분이 오늘 진행한 내용입니다.

태양열 프로젝트

1차 시도. 랜덤 포레스트 log 상태에서 스케일링에 따른 변화
-> 변화 없음

2차 시도. log 아닌 상태에서 스케일링에 따른 변화
->Normalizer

3차 시도. 변수의 차분 변화에 따른 성능 측정
->변수 2개 이상 동시 사용 시 성능 저하 발생

4차 시도. extracted_features 활용
-> 모든 변수 사용시 성능 저하 발생하여 VIF 및 RFECV 실행

 extracted_features 함수를 통해 얻은 변수들 중 의미 있어 보이는 120여 개 피처들로 예측한 그래프입니다.

성능값이 23점을 기록했습니다;;

120여개의 피처들을 vif를 통해 추리고, 추린 값을 refecv를 통해 또 추려봤습니다. 120개의 피처를 refecv를 돌리면 에러가 발생해서 vif 통해 1차적으로 걸렀습니다. 그래서 vif을 통해 얻은 피처 VS vif+refecv을 통해 얻은 피처들을 각각 랜덤 포레스트에 돌렸고 결과는 아래와 같습니다. 기존 변수 활용 시 성능은 7.801이었습니다.

* VIF : 7.98 (성능다운)
* refecv: 7.98(성능다운)

ㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎㅎ


5차 시도. 랜덤 포레스트 그리드 서치

-> 랜덤포레스트 그리드 서치를 실행했습니다. 
{'criterion': 'mse',
 'max_depth': None,
 'max_features': 'auto',
 'min_samples_leaf': 2,
 'min_samples_split': 8,
 'n_estimators': 300}

 

앞서 구한 결과를 토대로 적용한 결과
* 7.96 (성능다운)

6차 시도. 계절성 분해 적용

-> target값을 분해한 후 validation data인 2021년 01월 추세&계절 값은 2020년도 01월 값을 사용했습니다.
랜덤 포레스트: 13.98 (추세+계절)
랜덤포레스트: 7.78(계절), 약 0.02 개선

 

7차 시도. Cloud lag값 제거

-> 7.73으로 성능 개선됨

 

8차 시도['Temperature','WindSpeed','Humidity'] 차분 횟수에 따른 성능변화

-> 차분 6일 때 가장 좋은 성능을 보임

1. diff -> 3 : 7.580
2. diff -> 4 : 7.510
3. diff -> 5 : 7.599
4. diff -> 6 : 7.435
5. diff -> 7 : 7.589 (차분 7회 이상부터 과적합)
6. diff -> 8 : 7.645
7. diff -> 9 : 7.702
8. diff -> 10 : 7.753

 

9차 시도. 랜덤 포레스트 estimator 변경에 따른 성능변화

300 : 7.369
400: 7.363
500: 7.326
600: 7.314
700: 7.331
800: 7.350
900: 7.340
1000: 7.360

 

10차 시도. 수정된 피처를 적용한 그리드 재검토

*그리드 결과

'max_depth': None, 
'min_samples_leaf': 6, 
'min_samples_split': 14, 
'n_estimators': 600

-> 정확도 83%, Score : 7.51
기존 7.31 보다 0.2 낮아짐. min_samples_leaf & min_samples_split는 과적합 방지로 사용한다. 기존에 사용하던 값은 디폴트 값을 이용했으므로 과적합에 취약한 모델일 가능성이 있다. 하지만 validation 값은 앞서 언급했듯이 0.2가 낮아진 상태이다. 어떤 파라미터가 옳은지는 사실 잘 모르겠다. 일단 val값을 가장 낮추는 방향으로 진행할 예정이다.

 

11차 시도. Cloud의 더미 변수화

-> 7.526으로 개선 효과 없음

 

12차 시도. day 데이터의 lag 적용

day lag값 -> 24,48 인 경우 7.249 성능개선day lag값 -> 24,48,72 인 경우 7.26 성능감소 
day lag값 -> 24,48,72,96 인 경우 7.35 성능감소 

 

13차 시도. seasonal 1월 값을 예측

기존에는 시계열 분해한 계절성 데이터를 2020/01 ->2021/01(validation) 그대로 복사했습니다.

그래서 이번 시도는 랜덤포레스트로 예측하여 2021/01 계절성 데이터를 채웠습니다. 그리고 스케일링 전/후 성능비교까지 포함하여 진행했습니다.

 

스케일링 전: 7.248
스케일링 후 7.248

 

진행한 결과 변화가 거의 없었습니다. 또한 스케일링 전후 차이도 없었습니다.

타켓값의 계절성 데이터는 랜덤포레스트 변수 중요도에서 70% 정도를 차지하는 변수입니다. 그래서 

나름 기대하면서 진행했는데 결과는 조금 아쉬웠습니다. 

 

14차 시도. 계절성 데이터를 차분

랜덤포레스트 후 잔차 진단 결과 자기상관 그래프입니다.

편자기상관은 튀는 값이 있긴 하지만 상당히 진정된 상태를 보입니다. 반면 자기상관은 패턴이 보입니다.

어떻게 랜덤포레스트 모델에서 자기상관을 없앨수 있을까 고민을 했습니다. 일단 가지고 있는 데이터 중 계절성 데이터가 있으므로 이를 차분하여 어떤 효과가 있는지 변화를 보고자 했습니다. 

주기는 24이고, 결과는 아래와 같습니다.

 

target 변수 차분 24: 11.535
target 변수 차분 24,48: 12.555
-> 오히려 자기 상관성 튀는 값과 패턴이 뚜렷해짐

랜덤과 사리마모델을 혼합해 볼까 생각도 해봤지만 사리마 모델도 현재 성능이 썩 좋지는 않고 정상성도 확보를 못하고 있었던 터라 ..;; 부랴부랴 다시 파라미터 점검에 나섰습니다. 그런데 전과는 다르게 이번엔 전체 데이터로 (파라미터 실험했을땐 2020년도만 데이터 쪼개서 실행했었음) 실행하니까 중간에 오류가 걸립니다. 원인도 나오지 않은 채 그냥 터진 것 같습니다. 사리마로 진행하는 건 시간 낭비 일거란 판단하에 내일은 lgb모델의 파라미터 최적화를 해볼 생각입니다.

반응형