본문 바로가기
학습노트/Python

[강의노트] Python - 머신러닝 - 선형회귀-실습(2)

by kime2 2024. 1. 30.

https://kime2pan.tistory.com/96

 

[강의노트] Python - 머신러닝 - 선형회귀-실습(1)

스파르타코딩클럽의 강의를 참고하여 정리하였습니다 사용데이터: seaborn시각화 라이브러리 기본 데이터 셋, tips 목표1. 주문의 전체 금액(total_bill)-> X 을 통해 받을 팁(tip)->y 예상하기 순서: 데이

kime2pan.tistory.com

 

 

목표3. 주문의 전체 금액(total_bill)-> x1 , ???-> x2,  x1과 x2를 통해 받을 팁(tip)->y 예상하기

tip을 예상할 수 있는 요소는 total_bill과 무엇을 분석해야 할까 ? -> barplot을 통해 예측하기

순서: 데이터획득 > 상관관계 확인하기 / 범주형 데이터 encoding > 선형회귀 훈련하기 > 평가

방법: 다중선형회귀

💡순서
라이브러리 불러오기 > 상관관계 확인하기 /데이터불러오기 > 범주형 데이터 encoding> 선형회귀 훈련하기(산점도 그려보기, 가중치/편행 계산, 회귀식 계산,  예측값 계산, 회귀식/산점도 확인) > 평가하기(MES,z-score)

 

 

0. 라이브러리 불러오기

import sklearn
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

 

1. 데이터불러오기

tips_df = sns.load_dataset('tips')
tips_df.head(3)
# X: total_bill
# y: tip

 

2. tip과 상관관계 확인하기

우선 sex와의 관계는 없었다..

sns.barplot(data = tips_df, x='time', y='tip')
sns.barplot(data = tips_df, x='day', y='tip')
sns.barplot(data = tips_df, x='size', y='tip')
#size: 식사인원
sns.barplot(data = tips_df, x='smoker', y='tip')

 

>> 식사인원과 팀과의 관계가 있는 것 같음!

 

 

3. 선형회귀 훈련하기

# 모델설계도 가져오기
# 학습
# 평가
model_lr3 = LinearRegression()
X = tips_df[['total_bill','size']]
y = tips_df[['tip']]
#학습
model_lr3.fit(X,y)

y_pred_tip2 = model_lr3.predict(X)
y_pred_tip2[:5]

 

 

4. 평가하기

- MES

# 다중선형회귀 mse: X변수가 전체 금액, 식사인원
print('다중선형회귀', mean_squared_error(y_true_tip, y_pred_tip2))

주문금액, 식사인원을 고려한 단중선형회귀 1.014564905610028

주문금액, 성별을 고려한 다중선형회귀 1.0358604137213614

 

-> MES값이 감소함!!

- z-score

print('다중선형회귀', r2_score(y_true_tip, y_pred_tip2))

주문금액, 식사인원을 고려한 단중선형회귀 0.46786930879612587

주문금액, 성별을 고려한 다중선형회귀 0.45669999534149974

 

-> z-score 값 증가함!!

 

결론: 전체주문금액과 식사인원을 고려하면 받을 수 있는 팁을 예상할 수 있다!

 

 

그러나,,,

주문금액과 식사인원이 독립적이라고 할 수 있을까?

식사인원이 많으면 주문금액도 높아지므로 상관관계가 있을 수 있음

 >> 다중공선성의 문제