KT 에이블스쿨 : 5차 미니프로젝트 (3일차) - 시계열 데이터 전처리 - 비즈니스 평가

       




    5차 미니프로젝트

    3일차 : 24.04.26 (금)  

    파이프라인을 만드는 함수랑 비즈니스 평가하는 부분이 주된 부분이었다.

    내가 파이프라인을 만들고, 비즈니스 평가를 위한 이미지 출력을 하는 코딩 파트를 맡았는데

    파이프라인의 의도를 정확하게 인지하지 못해서 잘못된걸로 만드느라 시간을 허비했고,,,

    전날 돌린 상품별 data.pkl이랑 오늘 돌리는 새로운 데이터셋의 컬럼이 달라서 성능 예측을 못했다.


    오류를 해결하느라 많은 시간을 보냈는데

    3시 제출마감하기 3분전에 코드를 다 돌려서 급하게 냈다. ..  휴 =3 


    성능은 개선하지 못했고, 그냥 코드를 다 돌려서 다행이었다. 

    하나 더 아쉬운거는 전날 팀원한테 보낸 코드의 data.pkl 이랑 내가 금일 돌린 data.pkl이 달라서

    팀원들이 찾아준 하이퍼파라미터 값이 나의 data.pkl이랑 맞지 않아 성능이 마이너스로 나온게 아쉽다. . 





    애를 먹은 문제들

    파이프라인의 의도

    파이프라인은 test용인 새로운 데이터셋의 전처리 과정만 하면 되는데

    파이프라인 안에 train_test_split부터 스케일링, 모델링 과정까지 넣은게 문제였다. 


    학습용 데이터로 학습한 모델이 새로운 데이터에서도 예측이 잘되는지 확인하는 용이기에 

    학습용 데이터랑 전처리만 똑같이 하면 되는거였는데, 이론적인 딥러닝 과정에 대한 이해가 미흡했다. 


    학습용 데이터의 전처리 과정(merge, 가변수화, 컬럼 추가 등)을 하고

    def pipeline(sales_data, orders_data, oil_price_data, Product_ID):
       ...
       ...
       x = df.drop(columns = ['Date', 'Target'])
       y = df.loc[:, 'Target']
        
    return x, y


    x랑 target(y)으로만 나눠서, xy를 return하면 되는거였다. . 

    혹은 x, y로 나누지 않은 전처리된 df를 return하고나서 x, y를 다른셀에서 데이터분리해도됨 


    그리고나서 predict하고 평가지표 확인

    x_test, y_test  = pipeline(sales, orders, oil_price, 3)
    y_pred = model03_rdf.predict(x_test)
    
    print('RMSE:',  mean_squared_error(y_test, y_pred, squared=False))
    print('MAE:',  mean_absolute_error(y_test, y_pred))
    print('MAPE:',  mean_absolute_percentage_error(y_test, y_pred))
    print('R2:',  r2_score(y_test, y_pred))
    print('MSE:',  mean_squared_error(y_test, y_pred))


    예전에 3차 미프에서 회귀나 분류할때도 파이프라인을 만들었었는데, 그때도 파이프라인을 어려워하고 제대로 복습을 못해서 이번에 이부분이 애를 많이 먹은 것 같다. 



    학습 데이터 ≠ 평가 데이터 (다른 형식)  

    새롭게 받은 test 데이터는 2017년 3월 (한달치)의 데이터라서, 

    전날에 만들었던 학습데이터 전처리 방식을 똑같이 적용했을때 문제가 생긴다.


    전날에 만들었던건, 1일전부터 ~ 30일전까지의 판매량을 반복문으로 shift 시켰다.. 

    for x in range(1, 30): 
            df[f'Qty_Lag_{x}'] = df['Qty'].shift(x)


    한달치 데이터인 test 데이터에 shift(1) 부터 shift(30)까지 준뒤, null값을 날리면

    한달치 전체 데이터가 날라가서 남는 데이터가 없게된다. . ㅋ 


    그래서, data.pkl에서는 1일전 ~ 30일전까지의 판매량을 shift한게 들어있고,

    test 데이터에는 1일전 ~ 3일전까지의 판매량을 shift한게 들어있었다. 


    모델 학습할때랑 test 데이터 돌릴때랑 데이터 구조가 다르다고, 에러가 났다. . 

    이 오류를 고치기 위해서 시간을 많이들임 



    하이퍼파라미터 튜닝 

    하이퍼파라미터 튜닝 담당은 다른 팀원이 했는데,

    내가 전날 만들었던, 1일전 ~ 30일전까지의 판매량이 포함된 많은 컬럼은 data.pkl를 기준으로 모델 하이퍼파라미터 튜닝을 했다.

    하지만, 최종적으로 돌아간거는 이날 만든 1일전 ~ 3일전까지의 판매량이 포함된 적은 컬럼의 데이터셋,, ,

    즉,, 다른 데이터셋에 최적화된 하이퍼파라미터를 대입한 것 ㅠ 






    비즈니스 평가

    제출마감 3분전에 시각화를 완료해서 비즈니스 평가를 검토할 시간이 없었다.. 

    근데 다시봐도 어떻게 해석할지 잘 모르겠다. . ㅎ


    • 상품 3 - 음료
      • Random Forest 
        • RMSE: 6467.0849142239285
          MAE: 5965.562962962963
          MAPE: 0.6451449838436984
          R2: -1.36031958886517
          MSE: 41823187.287782714
      • Light GBM
        • RMSE: 2072.5465800108136
          MAE: 1530.1579077318622
          MAPE: 0.1253566057832863
          R2: 0.7575834400636526
          MSE: 4295449.32631452







    • 상품 12 - 우유
      • Random Forest 
        • MAE: 7804.567071358026
          MAPE: 0.8926239473408488
          R2: -5.609302158853525
          MSE: 79587175.6734195
      • Light GBM
        • MAE: 4159.738584437088
          MAPE: 0.4603366652094462
          R2: -0.6823165292017415
          MSE: 20257936.152687807






    • 상품 42 - 곡식
      • Random Forest
        • RMSE: 23.338741101738794
          MAE: 20.63753086419753
          MAPE: 0.20070093125176486
          R2: -0.8823607186537092
          MSE: 544.6968362139918
      • Light GBM
        • RMSE: 21.14602120388167
          MAE: 18.67868565291494
          MAPE: 0.1802828125768775
          R2: -0.5452733875250277
          MSE: 447.1542127550132






    발표 타임

    - 교차 상관분석해서 30일전 데이터랑 높은 연관성을 가진걸 알아냄 (lag_30)

    - 자기 상관분석해서, 1일 후와 7일 후에 자기상관계수가 높음 => Qty_Lag_1, 7 변수 추가  


    - 2개의 열을 하나의 그래프에 같이 그리는게 더 보기좋은듯 

    -- 년도별 상품 판매량을 하나의 그래프로 그려서 비교함


    - 상품별 성능을 좋게하기 위해서 상품별 데이터전처리를 다르게함. 

    -- 상품42(곡식) : seasons, quarters 열 추가하고 기존 열 삭제하니 선형회귀에서 성능 향상됨


    - (가설, 추측) 해외시장의 경우 겨울 폭풍(12월 후)을 대비해 빵과 우유를 비축함


    - 우리조가 찾은 곡식의 밀 수확시기의 관계 




















    댓글

    이 블로그의 인기 게시물

    [KT 에이블스쿨 - IT 트랜드] 국내외 AI 관련 규제

    KT 에이블스쿨 : IT 인프라 (1일차~5일차) 공부 정리

    KT 에이블스쿨 : 핀테크 아이디어 공모전