▶ 강의명
▷ [패스트캠퍼스] 파이썬을 활용한 이커머스 데이터 분석
▶ 주제
▷ ch2. 고객별 연간 지출액 예측 (Linear Regression)
-- 강의 내용 --
01. 분석의 목적
선형회귀분석을 통해 고객체류시간 등과 같은 독립변수로 고객별 연간 지출액을 예측하는 모델을 개발한다.
02. 모듈 및 데이터 로딩
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
>> 선형회귀, 그래프에 라인 그리기, 로데이터 읽어오기 등을 위한 모듈을 불러온다.
pd, np 등과 같은 약어는 일반적으로 자주 쓰는 약어이기 때문에 잘 알아두자
data = pd.read_csv('eCommerce.csv')
>> pandas 모듈의 read_csv 함수를 통해 이커머스 로데이터를 불러오고 data로 저장한다.
(read_ 까지 입력하고 탭 누르면 csv 읽어오기 이외 다양한 기능 나옴)
>> data를 보면, 고객별 다양한 지표인 것을 확인할 수 있다. 평균세션시간, 앱체류시간 등의 독립변수를 바탕으로 연간지출액 종속변수를 예측할 것이다.
03. 데이터 특성 확인하기
data.head()
>> 맨 위 5행 불러옴 (괄호 안에 숫자 넣으면 그 행만큼 불러옴)
data.tail()
>> 맨 아래 5행 불러옴 (괄호 안에 숫자 넣으면 그 행만큼 불러옴)
>> info 함수를 통해 데이터에 관한 정보를 확인할 수 있다. 데이터타입, row와 column 수, null값 수 등이 나타난다.
또한 모든 컬럼이 non-null이므로 missing value는 없음을 알 수 있다.
>> describe 함수를 통해 데이터의 기술통계량도 확인할 수 있다.
04. 불필요한 변수 버리기
본격적인 분석을 위해 데이터를 정제해야 한다. 우선 텍스트 데이터는 전부 제거한다
email, address, avatar 컬럼을 제거해본다.
나머지 컬럼명을 기재해서 data를 다시 저장해주는 방법도 있고,
data = data[['Avg. Session Length', 'Time on App', 'Time on Website', 'Length of Membership', 'Yearly Amount Spent']]
drop 함수를 사용하는 방법도 있다.
data.drop(['Email','Address','Avatar'], axis =1, inplace =True)
>> 내부 파라미터인 axis는 제거할 데이터를 지정해준다 (0이면 로우, 1이면 컬럼, 미기재시 로우)
>> inplace=True는 가공된 데이터를 그대로 저장하게 해준다. (False이거나 미기재시 저장하지 않음)
** 간단히 data.drop(3) 실행시 위에서 3번째 행(2행)만 날린다
05. Train, Test Set 나누기
70%~80%의 train data로 모델을 만들고, 20~30%의 test data로 만들어진 모델을 검증하는 것이 일반적이다
from sklearn.model_selection import train_test_split
>> 머신러닝을 지원하는 사이킷런(scikit learn) 모듈은 pandas나 numpy와 다르게 트리구조로 되어 있어서 from을 쓴다
tran_test_split 함수를 통해 훈련용 데이터와 검증용 데이터를 나눌 것이다
X : 독립변수, y : 종속변수 (대소문자는 이렇게 쓰는 것이 일반적이라고 함)
이제 데이터를 입력한다 (평균세션시간, 앱사용시간, 웹사용시간, 가입기간을 X로 하여 연간지출액 y를 구하고 있다)
X = data[['Avg. Session Length', 'Time on App', 'Time on Website', 'Length of Membership']]
#또는
X = data.drop('Yearly Amount Spent', axis=1)
y = data['Yearly Amount Spent']
입력된 데이터를 train_test_split 함수로 나눈다,
X_train, X_test, y_train, y_test = train_test_split(X,y, test_size = 0.2, random_state = 100)
>> test_size 파라미터를 통해 test data는 전체의 20%로 지정했다 (미기재시 0.25)
>> random_state 파라미터를 같은 수로 설정하면 데이터를 나눌때마다 랜덤샘플링이 되는 가운데에서도 같은 조건으로 실험 가능 (매번 미세한 차이 나기 때문에 다른 팀원과 싱크맞출때 사용)
데이터가 잘 나눠졌는지 보기 위해 X_test 데이터를 확인해보면
>> 500 row의 20%인 100 row가 잘 할당되었다.
-- 끝 --