오늘은 tips 데이터를 활용해서 선형회귀 모델을 적용하는 실습을 했다.
이번 실습의 핵심은 total_bill을 독립변수 X로 두고, tip을 종속변수 Y로 설정하여 전체 지불금액이 팁 금액에 어떤 영향을 주는지 확인하는 것이었다. 자료에서도 total_bill은 전체 지불금액, tip은 팁 금액으로 설명되어 있다.
핵심 개념
선형회귀는 독립변수와 종속변수 사이의 선형 관계를 학습하는 모델이다.
이번 실습에서는 다음과 같은 구조로 분석을 진행했다.
X = tips_df[['total_bill']]
y = tips_df['tip']
즉,
전체 지불금액 total_bill → 팁 금액 tip 예측
이라는 관계를 모델로 학습하는 것이다.
실습 흐름
from sklearn.linear_model import LinearRegression
X = tips_df[['total_bill']]
y = tips_df['tip']
model = LinearRegression()
model.fit(X, y)
print(model.coef_)
print(model.intercept_)
print(model.score(X, y))
- LinearRegression() : 선형회귀 모델 생성
- fit(X, y) : 데이터 학습
- coef_ : 회귀계수
- intercept_ : 절편
- score(X, y) : 결정계수 R² 확인
- predict() : 새로운 데이터에 대한 예측
이해한 점
total_bill과 tip은 모두 연속형 변수이기 때문에 선형회귀 분석에 사용할 수 있다.
회귀계수가 양수라면 전체 지불금액이 증가할수록 팁 금액도 증가하는 경향이 있다고 해석할 수 있다.
또한 결정계수 R²를 통해 total_bill이 tip을 얼마나 잘 설명하는지도 확인할 수 있다.
R² 값이 높을수록 모델이 데이터를 잘 설명한다고 볼 수 있지만, 팁 금액은 지불금액 외에도 성별, 흡연 여부, 요일, 식사 시간, 식사 인원 등의 영향을 받을 수 있기 때문에 단일 변수만으로 완벽하게 예측하기는 어렵다.
헷갈렸던 점
처음에는 coef_와 intercept_가 조금 헷갈렸다.
- coef_는 X가 1 증가할 때 Y가 얼마나 변하는지를 의미한다.
- intercept_는 X가 0일 때의 기본 예측값이다.
또한 X를 만들 때는 tips_df['total_bill']처럼 Series로 넣는 것이 아니라, tips_df[['total_bill']]처럼 2차원 DataFrame 형태로 넣어야 한다는 점이 중요했다.
느낀 점
선형회귀는 단순히 예측만 하는 모델이 아니라, 변수 간 관계를 식으로 해석할 수 있다는 점이 좋았다.
특히 total_bill과 tip처럼 현실적으로도 관계가 예상되는 데이터를 사용하니 회귀분석의 의미가 더 잘 이해되었다.
다음에는 total_bill 하나만 사용하는 단순 선형회귀뿐 아니라, size, day, time 같은 다른 변수도 함께 사용해서 다중 선형회귀로 확장해보고 싶다.