AI/실습

126. [Python] [Multiple Linear Regression] : 이커머스(온라인 쇼핑몰) 상품 일간 판매량 예측

천재단미 2025. 1. 27. 15:52
728x90
반응형

 

 

 

 

 

 

문제 이커머스(온라인 쇼핑몰) 상품 일간 판매량 예측

  • 시나리오이커머스에서는 마케팅 예산, 프로모션 여부, 계절, 경쟁사 가격 정책 등이 판매량에 영향을 줄 수 있습니다.
  • 한 온라인 쇼핑몰에서 특정 상품(예: 여름 티셔츠)의 일간 판매량을 예측하려고 합니다.

 

  • 피처(입력변수) 예시
    • DayOfWeek: 요일(0=월, 6=일)
    • IsHoliday: 공휴일 여부 (0 또는 1)
    • MarketingSpend: 당일 마케팅 지출액(만원 단위)
    • CompetitorPrice: 경쟁사 판매가(원)
    • Price: 우리 상품 판매가(원)
    • Month: 달(1~12)
  • 타깃(출력변수)
    • Sales: 판매량(당일 몇 개 팔렸는지)

 

데이터 다운로드 링크

 

LinearRegression 과 RandomForest 를 이용해서 더 성능이 좋은것으로 합니다.

 

 
 

다음을 조건에서 판매량을 예측하시오.

DayOfWeek=3(목요일 가정), IsHoliday=0, MarketingSpend=80, CompetitorPrice=21000, Price=25000, Month=7(7월 가정)

 

 

문제. MSE와 R2 Square 를 구하시오.

 

  • 파일 이름: ecommerce.csv
  • 데이터 구성:
    • Feature:
      • Product_Price: 상품 가격
      • Advertising_Expense: 광고비
      • Customer_Reviews: 고객 리뷰 점수
    • Target:
      • Daily_Sales: 일간 판매량

 

풀이

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv('ecommerce.csv',index_col = 0)
df

  • pd.read_csv를 사용해 데이터를 불러옵니다.
  • head, info, describe로 데이터 샘플, 구조, 통계 정보를 확인합니다.

 

1. 데이터 전처리

1-1. 결측치 처리

# 결측치 확인
df.isna().sum()


# 있을 경우 제거 
# 결측치 제거
data.dropna()

 

1-2. Feature와 Target 분리(X와 y와 구분 )

# Feature와 Target 분리
X = data[['Product_Price', 'Advertising_Expense', 'Customer_Reviews']]
y = data['Daily_Sales']

  • 데이터 스케일링
  • from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X)

 

 

출력

:  X , y

 


 

 

2. 데이터 분할(training 용과 Test용)

인코딩 진행은 패스 : 인코딩(변환) 할 문자열이 없어 

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 27 )

 

설명:

  • 데이터를 학습용(X_train, y_train)과 테스트용(X_test, y_test)으로 분리합니다.
  • 테스트 데이터 비율: 20%.

 


 

3. 모델 학습

 

 

추가확인

LinearRegression 과 RandomForest 를 이용해서 더 성능이 좋은것으로 합니다.

 

 

 

 

3-1. LinearRegression 

from sklearn.linear_model import LinearRegression

# 모델 생성
regressor1 = LinearRegression()

regressor1.fit(X_train, y_train)

 

 

 

3-2. RandomForest

from sklearn.ensemble import RandomForestRegressor
regressor2 = RandomForestRegressor (random_state = 27)

# 모델 생성
regressor2.fit(X_train, y_train)

 

 


 

 

4. 모델 예측

4-1. LinearRegression 

# 모델 학습
regressor1.fit(X_train, y_train)


y_pred1

 

 



4-2. RandomForest

# 모델 학습
y_pred2 = regressor2.predict(X_test)

y_pred2

 

 

 

 

 


 

 

5. 모델 평가

from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score

# 평가 지표 계산(regressor1)
error = y_test - y_pred1
(error **2).mean()
#390.4502145454608

mean_absolute_error(y_test, y_pred1)
#16.536814878989148

r2_score(y_test, y_pred1)
#0.9277801251271309


# 평가 지표 계산(regressor2)

error1 = y_test - y_pred2
(error1 **2).mean()
#447.1433630136985

mean_absolute_error(y_test, y_pred2)
#17.331095890410957

r2_score(y_test, y_pred2)
#0.9172938404844357

 

설명:

  • MSE (Mean Squared Error): 평균 제곱 오차.
  • MAE (Mean Absolute Error): 평균 절대 오차.
  • R² (R-Squared): 결정 계수, 모델 성능을 측정.

 

 

 

 

 

추가문제

다음을 조건에서 판매량을 예측하시오.

DayOfWeek=3(목요일 가정), IsHoliday=0, MarketingSpend=80, CompetitorPrice=21000, Price=25000, Month=7(7월 가정)

np.array([ 3, 0, 80, 21000, 25000, 7])
new_data = np.array([ 3, 0, 80, 21000, 25000, 7])
new_data.shape

# 1차원이라면 shape

regressor1 = regressor1.predict(new_data)

regressor1

 

출력

:  regressor1

 

array([257.47140747])

 

728x90
반응형
home top bottom
}