카테고리 없음

파이썬을 활용한 이커머스 데이터분석 (고객별 연간 지출액 예측 - Linear Regression)

민듀키티 2022. 2. 9. 23:53

 

 

1. Train Test Split

Train, Test를 Split 하지 않으면, 새로운 데이터 셋이 들어왔을 때, 잘 맞지 않은 경우가 발생한다.

그림의 경우를 예시로 들자면

오른쪽 그래프는 매우 잘 맞지만, 새로운 데이터가 들어온 왼쪽 그래프는 잘 맞지 않음

-> 그렇기 때문에 Train, Test Split 작업이 필요함

 

 

파이썬 코드로는 어떻게 구현 ?

from sklearn.model_selection import train_test_split
X = data.drop('Yearly Amount Spent', axis=1)
y = data['Yearly Amount Spent']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3, random_state=100)

test_size = 0.3 -> test size의 비율을 전체 데이터 셋에서 0.3의 비율로 하겠다

random_state = 100 -> train, test 데이터를 랜덤으로 나누게 되는데, 누가 코드를 실행을 하든 같은 결과를 도출하기 위해서 random_state를 파라미터로 설정을 해준다.

 

 


 

2. 실습에 사용할 데이터 셋 확인하기

 

(1) 모듈 및 데이터 로딩

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns

data = pd.read_csv('ecommerce.csv')

 

(2) 상위부분 출력

data.head()

(3) 정보 확인하기

data.info()

(4) 요약통계량 확인하기

data.describe()

(5) 관계 그래프

sns.pairplot(data)

 


3. 모델을 활용하여 예측하고 평가하기

 

 

(1) MSE  : 실제값과 예측값의 차이를 제곱해 평균화

(2) 코드 확인

 

* Linear Regression을 구현하는 데는 많은 방법이 있지만,

Regression Result 결과 정리에 특화된 OLS를 이용하여 구현함

import statsmodels.api as sm
lm = sm.OLS(y_train, X_train).fit()

lm.summary()

R - Squared : 변수가 많으면, R - Squared 값이 높아짐, 클수록 좋은 모델이다

Adj - R - Squared : 변수가 많으면, R - Squared 값이 높아진다는 단점을 극복하기 위해서 만들어진 것

Coef : 변수의 영향력 정도 (단, 데이터 스케일이 다른데 coef를 비교하는 것은 옳지 않음)

p - value : 신뢰할 수 있는 결과인가? 에 대한 척도 (0.05 이하이면 양호함)

 

 

R- Squared ? 

R - Squared는 크면 클수록 좋은 것으로, 일반적으로 0.8 이상이면 좋은 수치라고 이야기 할 수 있다 

 


4. 수식 만들어보기

 

coef를 이용해서 수식을 만들어볼 수 있음 -> 이 수식을 이용하여 예측을 한다.

 

 

Y = 12.144 * Avg.Sessoin Length + 34.1335 * Time  on App + -14.3109 * Time on Website + 61.2897 * Length of MeberShip

 


5. 예측 및 평가

predictions = lm.predict(X_test)
predictions

 

sns.scatterplot(y_test,predictions)

from sklearn import metrics
print('MSE:', metrics.mean_squared_error(y_test, predictions))
print('RMSE:', np.sqrt(metrics.mean_squared_error(y_test, predictions)))