본문 바로가기

코딩공부

[패캠] 파이썬 이커머스 데이터 분석 올인원 패키지 #1 고객별 연간 지출액

Project #1  고객별 연간 지출액 예측 (Linear Regression)

 

 

1. 라이브러리 가져오기

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns
  • 사용하는 라이브러리 4개

 

 

2. 데이터 불러오기 & 데이터 확인

data = pd.read_csv('ecommerce.csv')   #Pandas 라이브러리 이용하여 CSV 파일 가져오기
data.head(10)   # First 10 Lows 가져오기  # 원하는 Low 개수만큼 숫자 변경 가능
data.tail()   # Last Lows 가져오기   #숫자 미기재 시, Default 5 Lows
data.info()   # Column name & Non-null# & Data type 
data.describe()  #Column name & 통계치 (Count, mean,std, min, 25%,50%,75%,max)
  • CSV 데이터 가져오기
  • 데이터와 그에 따른 정보 조회하기

 

 

3. 데이터 인덱싱

data = data[['Avg. Session Length','Time on App','Time on Website','Length of Membership','Yearly Amount Spent']]
# 필요없는 문자열 삭제
# 1개 이상의 열을 가져올때는 []를 2개 써야 함
  • ecommerce 파일에서 이메일, 주소 등 필요없는 문자열은 제외하는 인덱싱

 

 

4. 데이터를 Train & Test로 나누기 (예측 그래프 만들고, 이를 테스트해보기 위해)

from sklearn.model_selection import train_test_split
#Sklearn.model_selecttion에 있는 train_test_split 함수 불러오기

X = data[['Avg. Session Length','Time on App','Time on Website','Length of Membership']]
y = data['Yearly Amount Spent']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 100)
#Train_test_split을 이용해서 X,y의 데이터를 Train, Test로 나누기
#test_size =0.2 -> Train : Test = 80 : 20
#random_state = '아무숫자' -> 어느 누가 코드를 돌리든 Train 데이터가 변하지 않게 하기 위해 사용
  • (3)번의 데이터를 이용하여 X,y의 변수값을 넣어주고, 이를 각각 Train data & Test data 로 나누어주기
  • 분석내용 : 평균사용률, 앱 사용시간, 웹사이트 사용시간, 멤버십기간 --> 연간 지출액

 

 

5. Regression 함수 & Train data 를 사용해서 예측 그래프 만들기

import statsmodels.api as sm

model = sm.OLS(y_train, X_train).fit() 
#Train 데이터를 이용해서 regression simulation 진행
#종속변수(y_train)을 먼저 입력해야 함.

model.summary()
# OLS regression result가 조회됨
  • Statsmodels.api의 OLS 함수와 Train data를 이용하여 예측 그래프 만들기 (하단 노랑색 그래프)

 

  • Summary를 통해 예측 그래프의 통계 정보 확인 가능

  • # R-squred : 값이 1에 가까울수록 좋음. (R-squred = SSR/SST -> 1에 가까울수록 예측을 잘했다는 의미)
    # SST : 평균값~실제값 / SSR : 평균값~예측값 / SSE : 예측값 ~ 실제값
    # R-squred는변수가 많을 수록 값이 높아짐/나쁜 변수가 포함되더라도 높아짐
    #Adj. R-squred 가 더 좋은 평가 기준 
    #coef : 직선의 기울기이며 변수의 영향력을 나타냄 (강도와 방향)
    #P-value : 신뢰할 수 있는 결과인가의 척도 (0.05 이하이면 양호)

 

6. Test data를 이용해 예측 그래프의 정확도 확인

pred = model.predict(X_test)

plt.figure(figsize = (10,10)) #차트 사이즈 정하기
sns.scatterplot(x=y_test, y=pred) # X_test와 y_test의 차이를 확인하기 위한 산점도 만들기
  • (5)번에서 만든 예측 그래프에 X_test 를 반영하여 추정값 확인
  • 예측 그래프를 통해 나온 추정값(Pred) vs 실제 데이터(y_test) 비교 (for 예측 그래프의 정확도 확인)
  1. 그래프의 X,Y값에 추정값과 실제데이터를 각각 넣어서 산점도 만들고
  2. 각 점들이 정방향 대각선에 위치할수록 두 값이 일치 & 예측 그래프의 정확도가 높은 것

 

 

7. 추정값과 실제 데이터의 차이 확인

from sklearn.metrics import mean_squared_error

mean_squared_error(y_test, pred)
#y_test와 pred의 차이값의 제곱 구하기 (마이너스를 커버하기 위해 제곱)


np.sqrt(mean_squared_error(y_test, pred))
#루트 씌워서 실제 차이값 확인하기
  • 두 데이터의 차이값의 제곱을 먼저 확인 (마이너스 값을 커버하기 위해)
  • 실제 차이값 확인을 위해 제곱값에 루트 씌우기