초보자를 위한 선형 회귀: 단순 선형 회귀

발행: (2026년 5월 24일 AM 07:52 GMT+9)
10 분 소요
원문: Dev.to

출처: Dev.to

매일 기업들은 미래 결과를 예측하려고 합니다:

  • 얼마나 많은 매출을 올릴 수 있을지
  • 어떤 주택의 가치가 상승할지
  • 학생들의 성적이 시간에 따라 어떻게 변할지
  • 광고가 매출에 어떤 영향을 미치는지

이러한 예측을 위해 가장 간단하면서도 강력한 도구 중 하나가 선형 회귀입니다.
공부한 시간에 따라 시험 점수를 예측해 본 적이 있다면, 축하합니다 — 이미 데이터 과학자처럼 생각한 것입니다.
공부 시간과 시험 점수 사이의 관계가 바로 선형 회귀가 이해하도록 설계된 관계입니다.

선형 회귀는 가장 간단하고 중요한 머신러닝 알고리즘 중 하나입니다. 데이터에서 패턴을 찾아내고, 그 패턴을 기반으로 예측을 수행합니다. 또한 오늘날 사용되는 많은 고급 머신러닝 시스템의 기반이 됩니다.

초보자에게 친숙하면서도 실제 산업 현장에서 널리 활용됩니다:

  • 금융
  • 의료
  • 교육
  • 스포츠
  • 마케팅
  • 부동산

배울 내용

이 글을 통해 다음을 배웁니다:

  • 선형 회귀가 무엇인지
  • 어떻게 작동하는지 (쉽게 설명)
  • 중요한 용어를 시각적으로 설명
  • 단순 선형 회귀 vs 다중 선형 회귀
  • Ridge와 Lasso 회귀
  • 파이썬으로 첫 모델 만들기
  • 결과를 시각적으로 이해하기
  • Joblib으로 모델 저장하기
  • Flask로 모델 배포하기
  • 초보자가 흔히 저지르는 실수

실생활 비유로 이해하는 선형 회귀

벽에 여러 개의 핀을 무작위로 꽂았다고 상상해 보세요.
그 다음 고무줄을 벽에 걸쳐 모든 핀을 가능한 한 가깝게 통과하도록 늘립니다.
고무줄이 모든 핀에 완벽히 닿지는 않지만, 가능한 한 가깝게 머무르려고 합니다.
이 고무줄이 바로 회귀선입니다.

선형 회귀는 모든 데이터를 외우는 대신,
**“모든 데이터를 동시에 가장 잘 설명하는 직선”**을 찾습니다.
혼돈을 단순한 직선 하나로 요약하려는 것이죠.

선형 회귀는 수치 값을 예측하는 머신러닝 알고리즘이며, 변수 간 관계를 가장 잘 나타내는 직선을 찾는 방식으로 동작합니다.

공부 시간시험 점수
140
250
360
470
580

공부 시간이 늘어남에 따라 시험 점수도 상승합니다.
각 행을 일일이 외우는 대신, 모델은 다음과 같이 학습합니다:

“시간이 늘어나면 점수도 일정한 패턴으로 증가한다.”

수식: y = mx + b

  • y : 예측값
  • x : 입력 변수
  • m : 기울기 (증가 속도)
  • b : 절편 (시작점)

왜 “선형”(Linear)이라고 할까?

‘선형’이라는 말은 관계가 직선 형태임을 의미합니다.
즉, 곡선이나 무작위가 아니라
“X가 증가하면 Y도 일정한 직선 형태로 변한다.” 라고 가정합니다.

  • 공부 시간이 늘어나면 점수도 상승
  • 큰 집일수록 가격도 상승
  • 광고가 많을수록 매출도 증가

선형 회귀의 목표

목표는 모든 점을 완벽히 통과시키는 것이 아니라,
모든 점에 동시에 가장 가깝게 위치하는 직선을 찾는 것입니다.

학생이 흩어진 점들을 연결하려고 할 때와 비슷합니다:
1️⃣ 첫 시도 → 직선이 별로 좋지 않음
2️⃣ 약간 조정 → 조금 나아짐
3️⃣ 다시 조정 → 더 나아짐
✅ 최종 결과 → 최적의 적합선

컴퓨터는 이 과정을 자동으로 수행합니다.

단순 선형 회귀는 하나의 입력 변수로 하나의 출력 변수를 예측합니다.

예) 공부 시간 → 시험 점수
우리는 오직 한 가지 요인만을 살핍니다:

“공부를 더 하면 점수가 올라갈까?”

수식: y = mx + b

그래프에 하나의 직선을 그리면 됩니다:

  • X축 = 공부 시간
  • Y축 = 시험 점수

다중 선형 회귀

다중 선형 회귀는 하나 이상의 입력 변수를 사용합니다.

예) 공부 시간, 수면 시간, 출석률

모두가 시험 점수에 영향을 미칩니다.

수식: y = b + m1·x1 + m2·x2 + m3·x3

단순히 “공부 시간이 중요한가?”를 묻는 대신,
“어떤 요인들의 조합이 성과에 영향을 미치는가?” 라고 질문합니다.

식물 성장도 햇빛만이 아니라

  • 햇빛
  • 비료
  • 토양
  • 온도

와 같은 여러 요인의 결합으로 이루어집니다.

실제 세계는 대부분 다중 회귀 형태이며, 우리는 이를 활용해 예측합니다.

예시: 공부 시간


종속 변수 (Y)

예측하고자 하는 대상입니다.

예) 시험 점수


기울기 (Slope)

출력이 얼마나 빠르게 변하는지를 나타냅니다.

  • 양의 기울기 → 두 변수가 함께 증가
  • 음의 기울기 → 한 변수는 증가하고 다른 변수는 감소

절편 (Intercept)

X = 0 일 때 직선이 시작되는 위치입니다.


잔차 (Residual)

잔차 = 실제값 - 예측값

잔차가 작을수록 모델이 더 좋습니다.


산업별 활용 예시

산업적용 분야
금융시장 추세 예측
의료회복 시간 예측
부동산주택 가격 추정
마케팅매출 예측
교육학생 성적 예측
스포츠선수 성과 분석

실습 코드

pip install numpy pandas matplotlib scikit-learn joblib
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

data = {
    "Hours": [1, 2, 3, 4, 5],
    "Scores": [40, 50, 60, 70, 80]
}

df = pd.DataFrame(data)

X = df[["Hours"]]
y = df["Scores"]

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

# 모델이 하는 일:
# - 패턴을 찾아봄
# - 시간과 점수 사이의 관계 학습
# - “최적의 직선”을 찾음

6단계: 예측하기

model.predict([[6]])
# “학생이 6시간 공부한다면, 어느 정도 점수를 받을까?” 라는 질문에 대한 예측
plt.scatter(X, y)
plt.plot(X, model.predict(X))
plt.xlabel("공부 시간")
plt.ylabel("시험 점수")
plt.show()
# 점 = 실제 데이터
# 선 = 모델이 만든 예측선

8. 모델 평가

R² 점수

model.score(X, y)
# 1 → 완벽히 설명
# 0 → 전혀 설명 못함

과적합 (Overfitting)

모델이 외우는 대신 학습하도록 해야 합니다.
학생이 답을 외우는 것이 아니라 개념을 이해하는 것과 같습니다.

  • 가중치를 축소해 과적합 방지
  • 불필요한 특성을 완전히 제거
import joblib
joblib.dump(model, "linear_model.joblib")  # 모델을 효율적으로 저장
model = joblib.load("linear_model.joblib")

Flask 로 배포하기

from flask import Flask, request, jsonify
import joblib

app = Flask(__name__)
model = joblib.load("linear_model.joblib")

@app.route("/predict", methods=["POST"])
def predict():
    data = request.json["hours"]
    prediction = model.predict([[data]])

    return jsonify({
        "predicted_score": float(prediction[0])
    })

if __name__ == "__main__":
    app.run(debug=True)

피해야 할 실수

  • 잡음이 많거나 비선형인 데이터를 그대로 사용
  • 결측값을 무시
  • 과적합된 모델 사용
  • 상관관계를 인과관계로 착각

왜 선형 회귀가 중요한가?

  • 기계가 패턴을 학습하는 방법을 알려줍니다.
  • 예측이 어떻게 이루어지는지 이해하게 합니다.
  • 모델
0 조회
Back to Blog

관련 글

더 보기 »

내 스킬

프로젝트를 위한 AI 지시문을 만들고, 설치하고, 관리하세요 — 코딩이 필요 없습니다. CREATE 이름을 정하고, 카테고리를 선택하고, 원하는 것을 설명하세요 — 마법사가 자동으로 구성합니다.