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 예측 그래프의 정확도 확인)
- 그래프의 X,Y값에 추정값과 실제데이터를 각각 넣어서 산점도 만들고
- 각 점들이 정방향 대각선에 위치할수록 두 값이 일치 & 예측 그래프의 정확도가 높은 것
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))
#루트 씌워서 실제 차이값 확인하기
- 두 데이터의 차이값의 제곱을 먼저 확인 (마이너스 값을 커버하기 위해)
- 실제 차이값 확인을 위해 제곱값에 루트 씌우기
'코딩공부' 카테고리의 다른 글
[SQL] 데이터 분석을 위한 SQL 레시피 : 1~2장 (0) | 2021.11.13 |
---|---|
[SQL] MYSQL 스토어드 프로시저 - 커서 (0) | 2021.11.08 |
[SQL] MYSQL 스토어드 함수 (0) | 2021.11.08 |
[SQL] MYSQL 스토어드 프로시저 (0) | 2021.11.07 |
[SQL] MySQL 트리거 (0) | 2021.11.06 |