#1 과 이어지는 주제의 본격적인 분석에 앞서,

여기서는 한번에 처리할 수 있게 함수를 쓰라는 이장래 강사님의 말씀에 함수를 많이 사용했다 !

 

1. 데이터 셋 구성하기

먼저 필요한 데이터만 불러오기 위해 조건을 넣는 작업을 했다.

 

44번 매장의 데이터만을 대상

대표 상품(3, 12, 42) 데이터만을 대상

최근 14일 간의 가격 평균 열 추가

Target 의 값은 LeadTime 이후의 판매량

 

 

이러한 데이터들로 구성된 데이터셋을 각각 상품별로 만들어줬다.

def data(Product_ID) : 
  ....
  ....

 

이런식으로 함수를 짜고 다음과 같이 불러주면 데이터셋이 정상적으로 나온다. 

data03 = data(3)
data03.head()

 

3번 상품의 데이터를 불러온 것이다. 

 

 

2. 1차 모델링

이제 위에서 만든 데이터셋으로 1차 모델링을 해보았다.

Linear Regression 알고리즘을 사용해 모델링을 하였고, 검증용 데이터는 학습용 데이터에서 최근 120일간의 데이터를 사용하였다. 그리고 모델의 검증성도 평가하였다. 

 

+ 120일간의 데이터를 사용하고 싶을 때는 test_size=120 으로 설정하면 된다. 

 

1) 상품 3 - Beverage

RMSE: 3063.895212895694
MAE: 2181.3976205973186
MAPE: 5.635373376172825e+17
R2: 0.2786334942555373

 

2) 상품 12 - Milk

RMSE: 3190.3232296105966
MAE: 2310.713867862975
MAPE: 6.10442905302347e+17
R2: 0.28143214450362497

 

3) 상품 42 - Agricultural products

RMSE: 12.84332528024306
MAE: 10.598845521250416
MAPE: 0.10828094682732756
R2: 0.6941449525224404

 

 

[1차 모델링 결과]

 

전체적으로 값이 정확히 예측되지 않는 것을 볼 수 있다. 

데이터셋을 구성할 때 조건이 부족했을 뿐더러 모델링을 할 때 모두 기본 값으로 해서 그런지 성능이 낮게 나왔다.

이를 보완하기 위해서는 (1) 데이터셋을 더 자세하게 여러개의 열을 추가 해야하며, 

(2) Linear Regression이 아닌 다른 알고리즘도 사용해보아야한다. 마지막으로 (3) 모델링을 할 때 성능 튜닝도 해야 한다. 

 

 

그럼 이어서 2차 데이터셋 구성과 모델링을 해보자 !

 

 

3. 2차 데이터셋 구성 

 

아래와 같은 조건들을 추가해서 2차 데이터셋을 구성했다. 

아마 열이 더 늘어났으니 예측이 잘 되지 않을까 ,,,, 하는 마음으로 ,,,, ㅎㅎ

 

Category_Qty: 동일 카테고리 판매량 합계

City_CustCount: 동일 지역 방문객 수

Qty_Lag_1: 1일 전 판매량

Qty_Lag_7_mean: 최근 7일간 판매량 평균

기타 등등...

 

4. 2차 모델링

2차 모델링에서도 우선 Linear Regression 알고리즘을 사용해서 모델링해보았다.

그래서 1차 모델링에서 사용했던 함수에 데이터셋을 그대로 넣어주었다. 

 

1) 상품 3 - Beverage

RMSE: 2718.7119042392924
MAE: 1792.8660983664802
MAPE: 5.6658938559277485e+17
R2: 0.43201804933180843

 

 

2) 상품 12 - Milk

RMSE: 2919.9146095209367
MAE: 2026.2294404895947
MAPE: 6.001107786942954e+17
R2: 0.39808008101954195

 

 

3) 상품 42 - Agricultural products

RMSE: 12.371496510507702
MAE: 9.897858574139157
MAPE: 0.10222201231399056
R2: 0.7162047240187923

 

 

 

[2차 모델링 결과]

 

1차 모델링의 MAE 값과 2차 모델링의 MAE (Mean Absolute Error) 값만 비교해보면,

 

 Beverage   2181.4  >>  1792.9
Milk   2310.7   >>  2025.2
Agricultural products   10.6   >>  9.9

 

이러한 결과는 모델링 과정에서의 개선이 예측 성능에 긍정적인 영향을 미쳤음을 보여준다.

특히, 1차 모델링과 비교했을 때, 전반적으로 모든 항목에서 MAE 값이 낮아진 것은 모델의 정확도가 향상되었음을 의미한다. 그러나 일부 항목에서는 여전히 상대적으로 큰 MAE 값을 보이고 있어, 예측 성능을 더욱 향상시키기 위해서는 데이터셋의 구성 및 모델링 방법론의 추가적인 개선이 필요하다.

 

데이터셋을 구성하는 과정이 더욱 복잡하고 세밀해질수록, 예측 성능이 개선될 가능성이 크다는 것을 이번 분석을 통해 알게 되었다. 이는 보다 정교한 데이터 수집과 전처리 과정이 중요하다는 것을 시사한다. 이를 바탕으로, 앞으로는 데이터의 질을 높이고, 다양한 특성을 고려하는 방향으로 데이터셋을 구성할 필요가 있다.

 

따라서, 다음 단계에서는 Linear Regression 알고리즘이 아닌 다른 알고리즘을 활용하여 모델링을 시도할 계획이다.

이를 통해 보다 높은 예측 성능을 달성할 수 있을 것으로 기대된다. 다양한 알고리즘을 적용해 봄으로써, 각 알고리즘의 특성과 데이터에 대한 적합성을 평가하고, 최적의 모델을 찾아가는 과정이 될 것이다.

 

5. 3차 모델링

  Random Forest LightGBM
Beverage 1816.34 1984.72
Milk 2038.35 2398.19
Agricultural products 10.55 11.39

 

 

3차 모델링의 예측 결과값을 한눈에 비교하기 위해서 각 모델의 MAE (Mean Absolute Error) 값만을 추출하여 비교해 보았다. 이 비교를 통해 전체적인 성능 차이를 명확히 알 수 있었다.

먼저, LightGBM과 Random Forest의 성능을 비교해 보면, Random Forest가 전반적으로 더 우수한 성능을 보였다. 이는 Random Forest가 다양한 결정 트리를 결합하여 예측 성능을 향상시키는 특성이 반영된 결과로 보인다.

그러나, Linear Regression 모델과 비교했을 때는 이야기가 달라진다. Linear Regression 모델의 MAE 값이 가장 낮게 나타나, 다른 모델들보다 예측 정확도가 높은 것으로 나타났다. 이는 Linear Regression이 주어진 데이터 세트에서 가장 적합한 모델임을 시사한다. 

따라서, 이번 분석에서는 여러 복잡한 모델들이 존재함에도 불구하고, Linear Regression이 가장 좋은 성능을 보였음을 확인할 수 있었다. 이 결과는 데이터의 특성이나 모델의 적합성에 따라 간단한 모델이 오히려 더 나은 성능을 발휘할 수 있음을 보여준다.

 

마지막으로 데이터 프레임을 joblib를 사용해 저장할 때는 다음과 같이 저장 할 수 있다.

joblib.dump(data03, path + 'data03.pkl')

 

 

이렇게 5차 미니 프로젝트도 끝 !

사실 다른 프로젝트들도 있고 한 건 더 많지만 내가 복습하고 싶었던 부분은 여기까지이다.

그럼 뿅

+ Recent posts