다음달 판매 예측

2024. 10. 2. 18:00데이터분석

프로젝트 개요

과거 3개월치 판매 데이터를 기반으로 4월 판매량을 예측하고,

안전재고와 현재고를 고려하여 필요 생산 수량 값 산출함으로써 재고 관리의 효율성을 높이는 것이 목표.

 

기술 스택

  • 프로그래밍 언어: Python
  • 라이브러리: Pandas, NumPy, Scikit-Learn, OpenPyXL
  • 모델링 기법: 선형 회귀 (Linear Regression)

프로젝트 상세 설명

데이터 분석 및 초기 계산값 활용

  • 데이터 로드 및 정리: Excel 파일에서 데이터를 불러와 필요한 열을 정리하고,
    결측치를 제거하여 분석에 적합한 데이터셋을 생성
  • 엑셀 계산값 활용: Excel에서 판매 이동평균과 안전재고를 미리 계산하여 Python에서 추가로 활용
더보기
=STDEV(D3:F3)*SQRT(K3)*T3
' D3:F3 1M, 2M, 3M 판매량
' K3 리드타임
' T3 결품목표

 

4월 판매량 예측

  • 모델 학습: Scikit-Learn의 LinearRegression을 사용하여 1, 2, 3월 데이터를 기반으로 선형 회귀 모델을 학습.
  • 4월 예측 값 계산: 학습된 모델을 통해 4월 판매량을 예측하고, 예측 값을 각 제품에 대해 저장.

 

안전재고 및 재고 수준 적용

  • 최종 조정 값 계산: 예측한 4월 판매량에 각 제품의 안전재고를 더하고, 현재 재고 수준을 빼서 최종 조정 값을 계산.
  • 조정 기준 적용: 계산된 최종 값이 0보다 작으면 0으로 설정하여, 재고 부족 상태를 방지할 수 있도록 조정.
더보기

코드

# 각 제품에 대해 4월 예측 값 및 안전재고와 현재고를 적용한 최종 값 계산
for index, row in New_DF.iterrows():
    y_all = np.array([row['1M'], row['2M'], row['3M']]).reshape(-1, 1)
    
    # 모델 학습 (전체 데이터를 사용)
    model = LinearRegression().fit(X_all, y_all)
    
    # 4월 예측 값 계산
    predicted_sales = model.predict(np.array([[4]]))[0][0]
    
    # 안전재고 더하고 현재고 빼기
    adjusted_value = predicted_sales + row['안전재고'] - row['현재고']
    
    # 최종 조정 값이 0보다 작으면 0으로 설정
    adjusted_value = max(0, adjusted_value)
    
    # 결과 저장
    results.append({
        '제품코드': row['제품코드'],
        'Predicted 4M Sales': predicted_sales,
        'Safety Stock (T)': row['안전재고'],
        'Current Stock (G)': row['현재고'],
        'Final Adjusted Value': adjusted_value
    })

# 결과를 DataFrame으로 변환하여 상위 5개만 출력
results_df = pd.DataFrame(results)
print(results_df.head(5))

 

결과

 

결과 저장 및 시각화

  • 결과 저장: 최종 결과를 DataFrame 형태로 정리하고,  엑셀 파일에 저장하여 재고 관리에 활용할 수 있도록 결과저장
더보기

코드

# 기존 엑셀 파일 불러오기
wb = openpyxl.load_workbook("C:\\Users\\KOPO\\Desktop\\SALES_DATA.xlsx")
ws = wb["4M예측"]

# 4월 예측 값(M열 3행부터)과 계산된 값(N열 3행부터) 기록
for idx, row in results_df.iterrows():
    ws.cell(row=idx + 3, column=13, value=row['Predicted 4M Sales'])  # M열 (13번째 열)
    ws.cell(row=idx + 3, column=14, value=row['Final Adjusted Value'])  # N열 (14번째 열)

# 엑셀 파일 저장
wb.save("C:\\Users\\KOPO\\Desktop\\SALES_DATA_4Mpred.xlsx")

print("예측 값과 계산된 값이 엑셀 파일에 저장되었습니다.")

결과

결과 및 고찰

  • 정확한 예측 기반 재고 관리:
    과거 3개월 데이터를 바탕으로 4월 판매량을 예측하여, 보다 정확한 재고 예측 및 관리가 가능해졌습니다.
  • 재고 조정 최적화: 엑셀에서 미리 계산된 안전재고와 현재 재고 수준을 활용한 최종 조정 값을 통해 불필요한 재고를 줄이는 효율적인 재고 관리 방안을 마련했습니다.

단순 평균 대신 성형 회귀를 사용하여 데이터의 전체적인 추세를 더 잘 파악할수 있었습니다.

단순 평균이나 이동 평균을 사용하면 특정 구간의 평균 값을 얻을 수 있지만, 

시간에 따른 변화 방향을 제대로 반영하지 못하는 한계가 있습니다.

선형회귀는 데이터의 전반적인 상승이나 하락 경향을 고려하여 예측 값을 계산하기 때문에 단순 평균보다 더 현실적인 결과를 제공합니다.

 

하지만 이번 분석에서는 월별 변화가 3개월 치 데이터에 한정되어 있어 전체적인 추세를 충분히 파악했는지에 대한 아쉬움이 남습니다. 다음에는 더 많은 데이터를 활용하여 더욱 신뢰도 높은 분석을 시도해 보려고 합니다

SALES_DATA_4Mpred.xlsx
0.30MB
SALES_4mPre.ipynb
0.00MB

'데이터분석' 카테고리의 다른 글

판매 건수를 통한 서버 최적화  (0) 2024.10.12
판매율 기반 군집  (0) 2024.10.11
Boston 범죄데이터 분석  (0) 2024.09.30
제품 판매 데이터 분석  (0) 2024.07.22