선형회귀 모델은 데이터 분석에서 정말 자주 사용되는데요, 선형회귀 모델은 변수 간의 상관관계를 파악하여 관계를 예측하는 데 사용됩니다. 한 가지 이상의 변수들의 관계 역시 분석할 수 있습니다. 머신러닝을 활용한 선형회귀 모델을 파이썬에서 제공하는 사이킷런 (Scitkit-Learn) 라이브러리를 사용하여 만들 수 있습니다. 머신러닝을 진행할 때 전체 데이터 (학습 데이터)를 학습에 사용하고 일부 데이터 (테스트 데이터)는 성능을 평가하기 위해 사용되기 때문에 데이터를 무작위로 섞어서 분할하는 과정이 필요합니다. 이번 글에서는 기본 선형회귀 그래프를 만들어 보고 선형회귀 모델을 만들기 위해 데이터를 분할하는 방법에 대해 알아보도록 하겠습니다.
기본 선형회귀 그래프
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
numpy, pandas, matplotlib, 그리고 seaborn을 모두 불러옵니다. seaborn 역시 matplotlib과 같이 데이터 시각화를 위한 라이브러리입니다.
df = pd.read_csv("Advertising.csv")
df.head()
분석에 사용할 "Advertising" csv 파일을 불러옵니다. 불러온 데이터프레임에는 각 미디어 별 광고 예산과 판매량이 있습니다. 광고 예산과 판매량 사이의 관계를 분석해 보도록 하겠습니다.
fig,axes = plt.subplots(nrows=1,ncols=3,figsize=(16,6))
axes[0].plot(df['TV'],df['sales'],'o')
axes[0].set_ylabel("Sales")
axes[0].set_title("TV Spend")
axes[1].plot(df['radio'],df['sales'],'o')
axes[1].set_title("Radio Spend")
axes[1].set_ylabel("Sales")
axes[2].plot(df['newspaper'],df['sales'],'o')
axes[2].set_title("Newspaper Spend");
axes[2].set_ylabel("Sales")
plt.tight_layout();
먼저 fig,axes = plt.subplots(nrows=1,ncols=3,figsize=(16,6))를 확인해 보겠습니다. subplots 함수는 그래프를 만드는 함수인데 fig,axes와 함께 사용합니다. fig는 프레임 그리고 ax 캔버스라고 이해하시면 됩니다. 16x6의 프레임 크기를 가진 그래프를 1행 3열, 즉 3개의 그래프를 그린다는 의미입니다.
axes[0].plot(df['TV'],df['sales'],'o')에 axes[0].plot는 첫 번째 열에 있는 그래프에 어떤 데이터를 그린다는 의미입니다. 즉, 불러온 데이터프레임에서 TV 예산을 x값 그리고 판매량을 y값으로 그리는데 그래프를 동그라미로 표현한다는 의미입니다. 그리고 set_ylabel과 set_title 함수를 이용하여 y축의 이름과 그래프의 이름을 지정했습니다.
2번째 열에 있는 그래프는 라디오 예산과 판매량의 관계 그리고 3번째 열에 있는 그래프는 신문 예산과 판매량의 관계를 보여주고 있습니다.
plt.tight_layout는 그래프가 잘리지 않도록 크기를 조절한다는 의미입니다.
sns.pairplot(df)
각 그래프에 대한 코드가 복잡한 경우 sns.pairpolot 함수를 사용할 수 있습니다. 모든 변수 간의 관계에 대한 그래프를 반환합니다. 불러온 데이터프레임에는 4개의 변수가 있기 때문에 16개 (4x4)의 그래프가 만들어졌습니다.
학습 데이터와 테스트 데이터 분할
X = df.drop('sales',axis=1)
y = df['sales']
그래프에 사용할 x 변수와 y 변수를 지정합니다. x 변수에는 sales (열)을 삭제하고 y 변수에는 sales를 사용합니다.
from sklearn.model_selection import train_test_split
사이킷런 라이브러리에서 train_test_split 함수를 사용합니다. train_test_split는 분석하는 데이터를 학습 데이터와 테스트 데이터로 분리해 줍니다.
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=101)
이제 데이터 분할을 준비합니다. train_test_split 함수를 이용하여 x 변수와 y 변수를 학습 및 테스트 데이터로 분할합니다. test_size=0.3은 각 변수 데이터의 30%만 테스트 데이터로 사용한다는 의미입니다. random_state는 크게 중요한 부분은 아니며 실행 결과가 동일하게 나올 수 있도록 임의의 숫자를 적어주면 됩니다. 테스트 데이터의 총 행 수는 60 (200의 30%)이며 학습 데이터의 총 행 수는 140인 것을 확인할 수 있습니다.
분석 모델 준비
from sklearn.linear_model import LinearRegression
사이킷런 라이브러리에서 LinearRegression (선형회귀) 함수를 사용합니다.
model = LinearRegression()
model.fit(x_train,y_train)
model을 만들고 해당 모델에 변수 값을 입력해야 합니다. fix함수를 사용하여 x 변수와 y 변수의 학습데이터를 해당 모델에 입력합니다.
'데이터 분석' 카테고리의 다른 글
파이썬 판다스 실무 데이터 분석 (1) (0) | 2024.03.04 |
---|---|
Matplotlib 기본 라인 그래프 만들기 (2) | 2024.01.31 |
판다스 데이터프레임 합치기 (concat, merge) (2) | 2024.01.27 |
Pandas 피벗 테이블 만들기 (2) | 2024.01.20 |
Pandas Null값 관련 함수 (0) | 2024.01.20 |