🤖

본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.

⚠️

본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.

이미지 로딩 중...

선형 회귀 완벽 가이드 - 슬라이드 1/7
A

AI Generated

2025. 12. 3. · 10 Views

선형 회귀 완벽 가이드

머신러닝의 가장 기본이 되는 선형 회귀를 처음부터 끝까지 다룹니다. 단순 선형 회귀부터 다중 선형 회귀, 그리고 시각화까지 실무에서 바로 활용할 수 있는 내용을 담았습니다.


목차

  1. 선형 회귀란?
  2. 단순 선형 회귀 구현
  3. 다중 선형 회귀 구현
  4. 회귀 계수와 절편 이해
  5. 예측값 계산하기
  6. 회귀 모델 시각화

1. 선형 회귀란?

김개발 씨는 이번에 새로운 프로젝트를 맡게 되었습니다. 부동산 가격을 예측하는 서비스를 만들어야 하는데, 데이터는 있지만 어떻게 예측 모델을 만들어야 할지 막막합니다.

선배 박시니어 씨에게 조언을 구하자, "선형 회귀부터 시작해보세요"라는 답이 돌아왔습니다.

선형 회귀는 한마디로 데이터 사이의 관계를 직선으로 표현하는 것입니다. 마치 학창 시절 수학 시간에 배운 일차 함수 y = ax + b와 같습니다.

입력 값이 변할 때 출력 값이 어떻게 변하는지 그 패턴을 찾아내는 것이 핵심입니다. 이것을 제대로 이해하면 미래의 값을 예측할 수 있는 강력한 도구를 얻게 됩니다.

다음 코드를 살펴봅시다.

import numpy as np
import matplotlib.pyplot as plt

# 공부 시간과 시험 점수 데이터
study_hours = np.array([1, 2, 3, 4, 5, 6, 7, 8])
test_scores = np.array([20, 35, 45, 55, 70, 75, 85, 90])

# 데이터 시각화로 관계 확인하기
plt.scatter(study_hours, test_scores)
plt.xlabel('Study Hours')
plt.ylabel('Test Score')
plt.title('Study Hours vs Test Score')
plt.show()

# 점들이 대략 직선 형태를 이루고 있음을 확인

김개발 씨는 입사 6개월 차 주니어 데이터 분석가입니다. 오늘 팀장님이 새로운 과제를 주었습니다.

"이 데이터를 분석해서 내년 매출을 예측해 봐요." 데이터를 열어보니 숫자만 가득합니다. 어디서부터 시작해야 할까요?

옆자리 선배 박시니어 씨가 다가와 말합니다. "먼저 선형 회귀가 뭔지 알아야 해요.

머신러닝의 가장 기본이거든요." 그렇다면 선형 회귀란 정확히 무엇일까요? 쉽게 비유하자면, 선형 회귀는 마치 점들 사이로 자를 대고 가장 잘 맞는 직선을 긋는 것과 같습니다.

학교에서 실험 데이터를 그래프로 그리고 추세선을 그어본 경험이 있으실 겁니다. 그 추세선이 바로 선형 회귀의 결과물입니다.

이처럼 선형 회귀도 흩어진 데이터 점들 사이에서 가장 적합한 직선을 찾아냅니다. 선형 회귀가 없던 시절에는 어땠을까요?

예측을 하려면 전문가의 경험과 직관에 의존해야 했습니다. "작년에 이 정도였으니 올해는 이 정도겠지"라는 식이었습니다.

하지만 이런 방식은 주관적이고, 데이터가 많아질수록 한계가 뚜렷해졌습니다. 더 큰 문제는 예측의 근거를 설명하기 어렵다는 점이었습니다.

바로 이런 문제를 해결하기 위해 선형 회귀가 등장했습니다. 선형 회귀를 사용하면 데이터에 기반한 객관적인 예측이 가능해집니다.

또한 예측 결과에 대한 수학적 근거를 제시할 수 있습니다. 무엇보다 새로운 데이터가 들어와도 동일한 방식으로 일관된 예측을 할 수 있다는 큰 이점이 있습니다.

위의 코드를 살펴보겠습니다. 먼저 numpy와 matplotlib을 가져옵니다.

이 두 라이브러리는 파이썬에서 데이터 분석의 기본 도구입니다. 그다음 공부 시간과 시험 점수 데이터를 배열로 만듭니다.

마지막으로 scatter 함수로 점들을 찍어보면, 공부 시간이 늘어날수록 점수도 높아지는 패턴을 눈으로 확인할 수 있습니다. 실제 현업에서는 어떻게 활용할까요?

예를 들어 마케팅 부서에서 광고비와 매출의 관계를 분석한다고 가정해봅시다. 광고비를 얼마나 써야 목표 매출을 달성할 수 있을지, 선형 회귀를 활용하면 데이터에 기반한 의사결정을 내릴 수 있습니다.

금융, 의료, 제조업 등 거의 모든 분야에서 이런 방식으로 활용되고 있습니다. 하지만 주의할 점도 있습니다.

모든 데이터가 선형 관계를 가지는 것은 아닙니다. 데이터를 먼저 시각화해서 정말 직선 형태의 패턴이 있는지 확인해야 합니다.

곡선 형태의 데이터에 억지로 직선을 맞추면 엉터리 예측이 나올 수 있습니다. 다시 김개발 씨의 이야기로 돌아가 봅시다.

박시니어 씨의 설명을 들은 김개발 씨는 고개를 끄덕였습니다. "아, 데이터 사이에 숨겨진 직선을 찾는 거군요!" 선형 회귀를 제대로 이해하면 데이터를 보는 눈이 달라집니다.

이제 다음 장에서 실제로 선형 회귀 모델을 구현해 보겠습니다.

실전 팁

💡 - 선형 회귀를 적용하기 전에 반드시 산점도로 데이터를 시각화해보세요

  • 데이터가 직선 형태가 아니라면 다른 회귀 기법을 고려해야 합니다

2. 단순 선형 회귀 구현

김개발 씨는 선형 회귀의 개념을 이해했습니다. 이제 직접 코드로 구현해볼 차례입니다.

박시니어 씨가 말합니다. "scikit-learn을 써보세요.

몇 줄이면 끝나요." 정말 그렇게 간단할까요?

단순 선형 회귀는 하나의 입력 변수로 출력을 예측하는 가장 기본적인 형태입니다. 마치 키만 알면 체중을 대략 예측할 수 있는 것처럼, 하나의 특성만으로 결과를 예측합니다.

scikit-learn 라이브러리를 사용하면 단 세 줄의 코드로 모델을 만들 수 있습니다.

다음 코드를 살펴봅시다.

from sklearn.linear_model import LinearRegression
import numpy as np

# 입력 데이터 (2D 배열 형태로 변환 필요)
X = np.array([1, 2, 3, 4, 5, 6, 7, 8]).reshape(-1, 1)
y = np.array([20, 35, 45, 55, 70, 75, 85, 90])

# 선형 회귀 모델 생성 및 학습
model = LinearRegression()
model.fit(X, y)  # 데이터로 모델 훈련

# 학습 완료! 이제 예측 가능
print(f"9시간 공부시 예상 점수: {model.predict([[9]])[0]:.1f}")

김개발 씨는 이제 실제로 코드를 작성해볼 참입니다. 에디터를 열고 키보드에 손을 올렸지만, 막상 뭘 써야 할지 모르겠습니다.

선형 회귀 알고리즘을 직접 구현해야 하나요? 박시니어 씨가 웃으며 말합니다.

"직접 구현할 필요 없어요. scikit-learn이라는 훌륭한 라이브러리가 있거든요." 단순 선형 회귀는 입력 변수가 하나인 경우를 말합니다.

수식으로 표현하면 y = ax + b 형태입니다. 여기서 a는 기울기, b는 절편이라고 부릅니다.

공부 시간 하나만 가지고 점수를 예측하는 것이 바로 단순 선형 회귀입니다. 쉽게 비유하자면, 단순 선형 회귀는 마치 줄자 하나로 키를 재고 "당신의 적정 체중은 이 정도입니다"라고 말하는 것과 같습니다.

정보가 하나뿐이지만, 그것만으로도 꽤 괜찮은 예측을 할 수 있습니다. 위의 코드를 자세히 살펴보겠습니다.

먼저 LinearRegression 클래스를 가져옵니다. 이것이 선형 회귀의 핵심입니다.

그다음 입력 데이터 X를 2차원 배열로 만드는 것이 중요합니다. reshape(-1, 1)은 1차원 배열을 세로로 세우는 작업입니다.

scikit-learn은 항상 2차원 입력을 요구하기 때문입니다. 모델을 만들고 fit 메서드를 호출하면 학습이 시작됩니다.

이 순간 컴퓨터는 최적의 a와 b 값을 찾아냅니다. 수많은 직선 중에서 데이터에 가장 잘 맞는 직선을 골라내는 것입니다.

학습이 끝나면 predict 메서드로 예측할 수 있습니다. 9시간 공부했을 때 점수가 궁금하면 predict에 9를 넣으면 됩니다.

모델이 찾아낸 직선 위의 점을 반환해줍니다. 실제 현업에서 단순 선형 회귀는 어떻게 쓰일까요?

신입 데이터 분석가가 처음 맡는 과제로 딱 좋습니다. 복잡한 모델을 바로 쓰기보다, 먼저 단순 선형 회귀로 기준점을 만들어보는 것이 좋습니다.

"광고비 1000만 원을 쓰면 매출이 얼마나 늘까?"라는 질문에 첫 번째 답을 줄 수 있습니다. 하지만 주의할 점이 있습니다.

입력 데이터를 반드시 2차원으로 변환해야 합니다. 이걸 잊으면 "Expected 2D array, got 1D array instead"라는 에러를 만나게 됩니다.

또한 하나의 변수만으로 예측하기 때문에 정확도에 한계가 있습니다. 더 정확한 예측이 필요하면 다중 선형 회귀를 사용해야 합니다.

김개발 씨가 코드를 실행해봅니다. "와, 정말 몇 줄 안 되네요!" 모델이 9시간 공부하면 약 99점이라고 예측했습니다.

데이터의 패턴을 잘 학습한 것 같습니다.

실전 팁

💡 - scikit-learn 입력 데이터는 반드시 2차원 배열이어야 합니다

  • fit은 학습, predict는 예측으로 기억하세요

3. 다중 선형 회귀 구현

김개발 씨의 부동산 가격 예측 프로젝트가 본격적으로 시작되었습니다. 그런데 집값은 면적만으로 결정되지 않습니다.

방 개수, 지하철역까지의 거리, 건축 연도 등 여러 요소가 영향을 미칩니다. 이럴 때는 어떻게 해야 할까요?

다중 선형 회귀는 여러 개의 입력 변수를 사용하여 예측하는 방법입니다. 마치 종합검진에서 여러 수치를 종합해서 건강 상태를 판단하는 것과 같습니다.

y = a1x1 + a2x2 + a3x3 + ... + b 형태로, 각 변수마다 고유한 가중치를 갖습니다.

코드는 단순 선형 회귀와 거의 동일하며, 입력 데이터의 열만 늘어납니다.

다음 코드를 살펴봅시다.

from sklearn.linear_model import LinearRegression
import numpy as np

# 다중 입력: 면적(평), 방 개수, 역까지 거리(분)
X = np.array([
    [20, 2, 10],  # 20평, 2개, 10분
    [25, 3, 5],
    [30, 3, 15],
    [35, 4, 8],
    [40, 4, 3]
])
y = np.array([30000, 45000, 35000, 55000, 70000])  # 가격(만원)

# 다중 선형 회귀 모델 학습
model = LinearRegression()
model.fit(X, y)

# 새 매물 가격 예측: 28평, 3개, 7분
new_house = [[28, 3, 7]]
print(f"예상 가격: {model.predict(new_house)[0]:,.0f}만원")

김개발 씨는 단순 선형 회귀로 첫 번째 모델을 만들었습니다. 면적만으로 집값을 예측했는데, 정확도가 생각보다 낮습니다.

왜 그럴까요? 박시니어 씨가 설명합니다.

"집값은 면적만으로 결정되지 않잖아요. 방이 몇 개인지, 역에서 얼마나 가까운지도 중요하죠.

여러 변수를 함께 보려면 다중 선형 회귀를 써야 해요." 다중 선형 회귀는 단순 선형 회귀의 확장판입니다. 수식으로 보면 y = a1x1 + a2x2 + a3x3 + b 형태입니다.

각각의 x는 서로 다른 특성을 나타내고, 각각의 a는 그 특성이 결과에 미치는 영향력을 나타냅니다. 쉽게 비유하자면, 다중 선형 회귀는 마치 여러 전문가의 의견을 종합하는 것과 같습니다.

한 전문가는 면적을 보고 "5000만 원 정도"라고 하고, 다른 전문가는 교통 편의성을 보고 "3000만 원 더 높게"라고 합니다. 이런 의견들을 적절히 조합하여 최종 가격을 산출합니다.

놀라운 점은 코드가 거의 바뀌지 않는다는 것입니다. 단순 선형 회귀에서는 X가 하나의 열을 가진 2차원 배열이었습니다.

다중 선형 회귀에서는 X가 여러 열을 가진 2차원 배열이 됩니다. LinearRegression 클래스는 똑똑해서 열이 몇 개든 자동으로 처리합니다.

fit과 predict 사용법도 완전히 동일합니다. 위의 코드에서 각 행은 하나의 매물을 나타냅니다.

첫 번째 매물은 20평에 방 2개, 역까지 10분 거리인 집입니다. 모델은 이 다섯 개의 데이터를 학습하여 각 특성의 중요도를 파악합니다.

실무에서 다중 선형 회귀는 매우 자주 사용됩니다. 고객의 구매 금액을 예측할 때 나이, 소득, 방문 횟수 등 여러 변수를 함께 고려합니다.

제조업에서는 온도, 압력, 시간 등 여러 공정 조건이 품질에 미치는 영향을 분석합니다. 변수가 많을수록 현실을 더 정확하게 반영할 수 있습니다.

하지만 변수가 많다고 무조건 좋은 것은 아닙니다. 서로 관련 없는 변수를 마구 넣으면 오히려 성능이 떨어질 수 있습니다.

또한 변수들끼리 너무 비슷한 정보를 담고 있으면 문제가 생깁니다. 이를 다중공선성이라고 하는데, 나중에 더 깊이 배우게 될 개념입니다.

김개발 씨가 새로운 모델을 만들어봅니다. 면적, 방 개수, 역까지 거리를 모두 고려했더니 예측 정확도가 확연히 올라갔습니다.

"역시 정보가 많으면 더 정확하게 예측할 수 있군요!"

실전 팁

💡 - 변수는 많을수록 좋은 게 아니라, 의미 있는 변수를 선택하는 것이 중요합니다

  • 변수 간 상관관계가 너무 높으면 다중공선성 문제가 발생할 수 있습니다

4. 회귀 계수와 절편 이해

모델이 완성되었습니다. 그런데 김개발 씨에게 새로운 고민이 생겼습니다.

팀장님이 묻습니다. "이 모델은 어떤 기준으로 예측하는 거야?

면적이 1평 늘면 가격이 얼마나 오르는데?" 모델 안을 들여다봐야 할 때입니다.

회귀 계수절편은 선형 회귀 모델의 핵심 파라미터입니다. 회귀 계수는 각 입력 변수가 결과에 미치는 영향력의 크기를 나타내고, 절편은 모든 입력이 0일 때의 기본값을 의미합니다.

마치 월급 계산에서 기본급(절편)과 성과급 비율(회귀 계수)과 같습니다. 이 값들을 이해하면 모델이 어떻게 예측하는지 설명할 수 있습니다.

다음 코드를 살펴봅시다.

from sklearn.linear_model import LinearRegression
import numpy as np

# 데이터 준비
X = np.array([[20, 2, 10], [25, 3, 5], [30, 3, 15], [35, 4, 8], [40, 4, 3]])
y = np.array([30000, 45000, 35000, 55000, 70000])

model = LinearRegression()
model.fit(X, y)

# 회귀 계수 확인 (각 변수의 영향력)
print(f"회귀 계수: {model.coef_}")
print(f"  - 면적 1평당: {model.coef_[0]:,.0f}만원")
print(f"  - 방 1개당: {model.coef_[1]:,.0f}만원")
print(f"  - 역거리 1분당: {model.coef_[2]:,.0f}만원")

# 절편 확인 (기본값)
print(f"절편: {model.intercept_:,.0f}만원")

김개발 씨는 모델을 완성하고 뿌듯해했습니다. 그런데 팀장님의 질문에 당황했습니다.

"모델이 어떻게 예측하는지 설명해줄 수 있어?" 단순히 숫자만 나오는 것으로는 부족합니다. 왜 그런 결과가 나왔는지 설명할 수 있어야 합니다.

박시니어 씨가 도움을 줍니다. "모델 안에는 학습된 값들이 저장되어 있어요.

그걸 꺼내서 보면 돼요." 회귀 계수는 영어로 coefficient라고 합니다. 각각의 입력 변수가 결과에 얼마나 영향을 미치는지를 숫자로 나타낸 것입니다.

면적의 회귀 계수가 1000이라면, 면적이 1평 늘어날 때마다 예측 가격이 1000만 원 오른다는 뜻입니다. 절편은 영어로 intercept라고 합니다.

모든 입력 변수가 0일 때의 값입니다. 물론 현실에서 0평짜리 집은 없지만, 수학적으로는 직선이 y축과 만나는 점을 의미합니다.

쉽게 비유하자면, 월급 계산과 비슷합니다. 기본급이 절편이고, 판매 실적당 성과급 비율이 회귀 계수입니다.

"기본급 200만 원에 판매 1건당 10만 원 추가"라는 규칙이 있다면, 월급 = 200 + 10 x 판매건수 가 됩니다. 위의 코드를 보면 model.coef_로 회귀 계수를 확인할 수 있습니다.

배열 형태로 반환되며, 입력 변수 순서대로 나옵니다. 면적, 방 개수, 역거리 순으로 넣었으니 결과도 그 순서입니다.

model.intercept_는 절편을 반환합니다. 이 값들의 의미를 해석하는 것이 중요합니다.

만약 면적의 계수가 1500이고 방 개수의 계수가 3000이라면, 방 개수가 가격에 더 큰 영향을 미친다고 해석할 수 있습니다. 단, 변수들의 단위가 다르면 직접 비교하기 어려우므로 주의해야 합니다.

실무에서 회귀 계수는 매우 중요한 인사이트를 줍니다. 마케팅에서 "광고비 1만 원당 매출이 얼마나 느는가"를 알 수 있습니다.

인사팀에서 "경력 1년당 연봉이 얼마나 오르는가"를 파악할 수 있습니다. 이런 정보는 의사결정에 직접적으로 활용됩니다.

하지만 해석할 때 주의할 점이 있습니다. 회귀 계수는 다른 변수들이 고정되어 있을 때의 영향력입니다.

실제로는 변수들이 서로 연관되어 있는 경우가 많습니다. 또한 인과관계와 상관관계를 혼동하면 안 됩니다.

회귀 계수가 높다고 해서 반드시 원인과 결과의 관계가 있는 것은 아닙니다. 김개발 씨가 팀장님께 보고합니다.

"이 모델에 따르면 면적 1평당 약 1500만 원, 방 1개당 약 3000만 원의 가격 차이가 납니다." 팀장님이 고개를 끄덕입니다. "좋아, 이제 왜 그런 예측이 나왔는지 이해가 되네."

실전 팁

💡 - coef_는 입력 변수 순서대로 반환되므로 순서를 잘 기억하세요

  • 변수의 단위가 다르면 계수를 직접 비교하기 어렵습니다

5. 예측값 계산하기

회귀 계수와 절편을 알게 된 김개발 씨에게 문득 궁금증이 생겼습니다. "predict 함수 안에서는 실제로 어떤 계산이 일어나는 걸까?" 블랙박스처럼 느껴지던 예측 과정을 직접 손으로 계산해보기로 했습니다.

예측값 계산은 회귀 계수와 절편을 이용한 단순한 산술 연산입니다. 각 입력값에 해당 회귀 계수를 곱하고, 모두 더한 뒤 절편을 더하면 됩니다.

마치 장바구니 계산처럼 각 물건의 가격에 수량을 곱하고 모두 더하는 것과 같습니다. predict 함수가 하는 일을 직접 구현해보면 선형 회귀의 원리를 완전히 이해할 수 있습니다.

다음 코드를 살펴봅시다.

from sklearn.linear_model import LinearRegression
import numpy as np

# 모델 학습
X = np.array([[20, 2, 10], [25, 3, 5], [30, 3, 15], [35, 4, 8], [40, 4, 3]])
y = np.array([30000, 45000, 35000, 55000, 70000])
model = LinearRegression()
model.fit(X, y)

# 새 데이터: 28평, 3개, 7분
new_data = np.array([28, 3, 7])

# 방법 1: predict 사용
pred1 = model.predict([new_data])[0]

# 방법 2: 직접 계산 (계수 x 입력값 + 절편)
pred2 = np.dot(model.coef_, new_data) + model.intercept_

print(f"predict 결과: {pred1:,.0f}만원")
print(f"직접 계산 결과: {pred2:,.0f}만원")
print(f"두 결과가 같은가? {np.isclose(pred1, pred2)}")

김개발 씨는 predict 함수를 수십 번 사용했지만, 정작 그 안에서 무슨 일이 일어나는지는 몰랐습니다. 마치 버튼만 누르면 결과가 나오는 자판기 같았습니다.

오늘은 그 자판기를 열어보기로 했습니다. 박시니어 씨가 말합니다.

"선형 회귀의 예측은 사실 아주 간단한 계산이에요. 초등학생도 할 수 있어요." 예측값을 구하는 공식은 다음과 같습니다.

예측값 = (계수1 x 입력1) + (계수2 x 입력2) + (계수3 x 입력3) + 절편. 그냥 곱하고 더하기만 하면 됩니다.

이것이 선형 회귀가 "선형"인 이유입니다. 복잡한 함수 없이 1차식만 사용합니다.

쉽게 비유하자면, 마트에서 장보기와 같습니다. 사과 3개에 1000원, 바나나 2개에 500원, 우유 1개에 2000원이면 총 금액은 3x1000 + 2x500 + 1x2000 = 6000원입니다.

선형 회귀도 똑같습니다. 각 특성(사과, 바나나, 우유)에 해당 가중치(가격)를 곱하고 다 더합니다.

위의 코드에서 핵심은 np.dot 함수입니다. 이것은 내적(dot product) 연산으로, 두 배열의 같은 위치 원소를 곱해서 모두 더합니다.

model.coef_와 new_data를 내적하면 계수 x 입력값의 합이 나옵니다. 여기에 절편을 더하면 예측값 완성입니다.

코드를 실행해보면 predict의 결과와 직접 계산한 결과가 정확히 일치합니다. np.isclose 함수는 두 숫자가 같은지 확인하는데, 부동소수점 오차를 고려해서 비교합니다.

이 원리를 이해하면 여러 가지 응용이 가능합니다. Excel이나 Google Sheets에서도 선형 회귀 예측을 할 수 있습니다.

회귀 계수와 절편만 알면 함수 하나 없이도 예측값을 계산할 수 있기 때문입니다. 보고서에 "예측 공식"을 넣어달라는 요청이 있을 때도 유용합니다.

실무에서 이 지식은 디버깅에도 도움이 됩니다. 예측값이 이상하게 나왔을 때, 직접 계산해보면 어디서 문제가 생겼는지 파악할 수 있습니다.

입력 데이터의 순서가 바뀌었거나, 단위가 잘못되었거나 하는 실수를 발견할 수 있습니다. 김개발 씨가 감탄합니다.

"predict가 대단한 마법을 부리는 줄 알았는데, 그냥 곱셈과 덧셈이었네요!" 간단해 보이지만, 이 간단함이 선형 회귀의 장점입니다. 해석하기 쉽고, 계산이 빠르고, 구현이 간단합니다.

실전 팁

💡 - 예측 공식을 Excel에 옮기면 비개발자도 예측을 활용할 수 있습니다

  • 예측값이 이상할 때는 직접 계산해보면 문제를 찾기 쉽습니다

6. 회귀 모델 시각화

김개발 씨의 선형 회귀 프로젝트가 거의 완성 단계에 접어들었습니다. 이제 결과를 발표해야 하는데, 숫자만 나열하면 청중이 지루해할 것 같습니다.

"그래프로 보여주면 한눈에 이해할 수 있을 텐데..." 시각화의 중요성을 깨달은 순간입니다.

회귀 모델 시각화는 데이터와 모델의 관계를 눈으로 보여주는 것입니다. 산점도 위에 회귀 직선을 그리면 모델이 데이터를 얼마나 잘 설명하는지 한눈에 파악할 수 있습니다.

마치 지도에 길을 표시하는 것처럼, 시각화는 복잡한 숫자를 직관적으로 이해할 수 있게 해줍니다. matplotlib을 사용하면 몇 줄의 코드로 멋진 그래프를 그릴 수 있습니다.

다음 코드를 살펴봅시다.

from sklearn.linear_model import LinearRegression
import numpy as np
import matplotlib.pyplot as plt

# 단순 선형 회귀 시각화
X = np.array([1, 2, 3, 4, 5, 6, 7, 8]).reshape(-1, 1)
y = np.array([20, 35, 45, 55, 70, 75, 85, 90])

model = LinearRegression()
model.fit(X, y)

# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.scatter(X, y, color='blue', label='Actual Data')  # 실제 데이터
plt.plot(X, model.predict(X), color='red', label='Regression Line')  # 회귀선
plt.xlabel('Study Hours')
plt.ylabel('Test Score')
plt.title('Linear Regression: Study Hours vs Test Score')
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()

김개발 씨는 발표 자료를 준비하고 있습니다. 표와 숫자로 가득한 슬라이드를 보니 한숨이 나옵니다.

팀장님은 바쁜 분이라 긴 설명을 싫어합니다. 어떻게 하면 핵심을 빠르게 전달할 수 있을까요?

박시니어 씨가 조언합니다. "백 마디 말보다 한 장의 그래프가 나아요.

시각화를 해보세요." 시각화는 데이터 분석의 꽃이라고 할 수 있습니다. 아무리 훌륭한 분석도 전달되지 않으면 의미가 없습니다.

특히 선형 회귀는 시각화하기 가장 좋은 모델입니다. 2차원 평면에 점과 직선으로 깔끔하게 표현할 수 있기 때문입니다.

쉽게 비유하자면, 시각화는 마치 사진을 보여주는 것과 같습니다. 만리장성이 얼마나 긴지 숫자로 설명하는 것보다, 사진 한 장을 보여주면 바로 이해됩니다.

선형 회귀의 시각화도 마찬가지입니다. "회귀 계수가 10.5이고 절편이 12.3입니다"라고 말하는 것보다, 데이터 점들과 그 사이를 관통하는 직선을 보여주는 것이 훨씬 효과적입니다.

위의 코드를 살펴보겠습니다. plt.scatter는 산점도를 그립니다.

실제 데이터 점들을 파란색으로 표시합니다. plt.plot은 선을 그립니다.

모델의 예측값을 빨간 직선으로 표시합니다. 이 두 요소를 한 그래프에 그리면, 직선이 점들을 얼마나 잘 통과하는지 볼 수 있습니다.

figsize로 그래프 크기를 조절하고, label과 legend로 범례를 추가합니다. grid는 격자선을 그려서 값을 읽기 쉽게 해줍니다.

alpha는 투명도로, 0.3이면 30% 불투명합니다. 좋은 시각화는 모델의 성능을 직관적으로 보여줍니다.

점들이 직선 가까이에 모여 있으면 모델이 데이터를 잘 설명하는 것입니다. 반대로 점들이 직선에서 멀리 흩어져 있으면 모델의 예측력이 낮다는 뜻입니다.

특히 어떤 구간에서 예측이 잘 맞고 어떤 구간에서 틀리는지도 시각화를 통해 발견할 수 있습니다. 실무에서 시각화는 필수입니다.

보고서에 그래프가 빠지면 설득력이 떨어집니다. 특히 경영진에게 보고할 때는 복잡한 수식보다 직관적인 그래프가 효과적입니다.

"이 직선이 예측 모델입니다. 보시다시피 대부분의 데이터를 잘 설명하고 있습니다." 하지만 다중 선형 회귀의 시각화는 조금 까다롭습니다.

변수가 여러 개면 2차원 그래프로는 전체를 표현하기 어렵습니다. 이럴 때는 실제값과 예측값의 산점도를 그리거나, 각 변수별로 개별 그래프를 그리는 방법을 사용합니다.

또는 잔차(오차) 그래프를 그려서 모델의 품질을 확인합니다. 김개발 씨가 그래프를 완성하고 발표에 나섰습니다.

팀장님이 그래프를 보자마자 말합니다. "아, 직선이 데이터를 잘 따라가네요.

모델이 괜찮아 보여요." 숫자로 5분 걸릴 설명이 그래프 하나로 5초 만에 끝났습니다.

실전 팁

💡 - 발표 자료에는 반드시 시각화를 포함하세요. 백 마디 말보다 한 장의 그래프입니다

  • 다중 회귀는 실제값 vs 예측값 산점도로 시각화하면 효과적입니다

이상으로 학습을 마칩니다. 위 내용을 직접 코드로 작성해보면서 익혀보세요!

#Python#LinearRegression#MachineLearning#Scikit-learn#DataScience#Machine Learning,Python

댓글 (0)

댓글을 작성하려면 로그인이 필요합니다.