한양과학기술고등학교

에듀테크 프로젝트 대시보드

최소제곱법 (Least Squares)

최소제곱법 (Least Squares · 선형 회귀)

흩어진 점들 사이를 지나는 가장 좋은 직선은 무엇일까? "좋다"를 각 점에서 직선까지의 세로 거리(잔차)를 제곱해 모두 더한 값 SSE 가 가장 작은 직선이라고 정의하면, 자를 대고 눈대중할 필요 없이 공식 한 줄로 정답이 나온다. 이게 최소제곱법이고, 데이터로 추세를 예측하는 선형 회귀의 핵심이다. 아래 판을 클릭해 점을 찍고, 분홍 직선을 슬라이더로 움직여 파란 최적 직선보다 SSE를 더 줄일 수 있는지 시도해 보자.

1. 가장 좋은 직선 찾기

● 점을 클릭으로 추가한다. 파란 직선은 최소제곱법이 계산한 SSE 최소 직선, 분홍 직선은 네가 슬라이더로 직접 맞추는 직선이다. 세로로 뻗은 주황 선분이 각 점의 잔차(예측 오차)이고, 그 정사각형 넓이의 합이 바로 최소화 대상이다.

데이터 점 최적 직선 (OLS) 내 직선 잔차 (오차)
…

2. 잔차를 왜 '제곱'해서 더할까

잔차 = 실제 − 예측

점 (xᵢ, yᵢ)에서 직선의 예측값은 ŷᵢ = a·xᵢ + b. 오차(잔차)는 eᵢ = yᵢ − ŷᵢ, 즉 세로 거리다.

그냥 더하면 상쇄

위로 벗어난 +오차와 아래로 벗어난 −오차가 서로 지워져 엉터리 직선도 합이 0이 된다. 그래서 부호를 없애야 한다.

절댓값 대신 제곱

제곱은 큰 오차에 더 큰 벌점을 주고, 매끄러운(미분 가능) 함수라 미분해서 최솟값을 한 번에 구할 수 있다.

목표

SSE(a,b) = Σ(yᵢ − a·xᵢ − b)² 를 가장 작게 만드는 a, b 를 찾는 것.

SSE(Sum of Squared Errors)를 a, b 두 변수의 함수로 보면 아래로 볼록한 그릇 모양이다. 바닥은 딱 한 곳 — 그래서 최적해가 유일하고, 반복 없이 공식으로 떨어진다.

3. 공식 (정규방정식)

SSE를 a로, b로 각각 편미분해 0으로 두면 연립방정식이 나오고, 풀면 이렇게 정리된다. x̄, ȳ 는 각각 x와 y의 평균이다.

a = Σ (xᵢ − x̄)(yᵢ − ȳ) Σ (xᵢ − x̄)²   ,   b = ȳ − a·x̄
분자 = x와 y가 함께 변하는 정도(공분산) · 분모 = x가 퍼진 정도(분산)
직선은 항상 무게중심 (x̄, ȳ) 를 지난다. 기울기 a 만 "x가 1 늘 때 y는 평균 몇 늘더라"를 재고, 절편 b 는 그 점을 지나도록 맞춰 준다.

4. 딱 12줄 (JavaScript)

// pts: [{x, y}, ...] → 최소제곱 직선 y = a·x + b function fitLine(pts) { const n = pts.length; const mx = pts.reduce((s, p) => s + p.x, 0) / n; const my = pts.reduce((s, p) => s + p.y, 0) / n; let num = 0, den = 0; for (const p of pts) { num += (p.x - mx) * (p.y - my); // 공분산 누적 den += (p.x - mx) ** 2; // x 분산 누적 } const a = num / den; // 기울기 const b = my - a * mx; // 절편 return { a, b }; }
변수가 여러 개(y = a₁x₁ + a₂x₂ + … + b)면 이 공식이 행렬식 β = (XᵀX)⁻¹ Xᵀy 로 확장된다 — 이름이 정규방정식(normal equation)인 이유. 데이터가 아주 크면 역행렬 대신 경사 하강법으로 같은 바닥을 찾아 내려간다.

5. 이 직선, 얼마나 잘 맞나 — 결정계수 R²

R² = 1 − SSE / SST  (SST = Σ(yᵢ − ȳ)², y를 그냥 평균으로만 예측했을 때의 오차). 1에 가까울수록 직선이 데이터의 흩어짐을 잘 설명한 것이고, 0이면 "평균으로 찍는 것과 다를 바 없다"는 뜻이다. 위 데모의 읽기 창에도 실시간 R² 가 표시된다.

6. 놓치기 쉬운 함정

이상치에 약하다

오차를 제곱하므로 멀리 떨어진 점 하나가 직선을 통째로 끌어당긴다. 데모에서 구석에 점 하나 찍어 보면 파란 선이 휙 기운다.

외삽은 위험

데이터 범위 바깥을 직선으로 늘려 예측하면 크게 빗나갈 수 있다. "키 3m인 사람의 몸무게" 같은 값은 믿을 수 없다.

상관 ≠ 인과

기울기가 뚜렷해도 x가 y의 원인이라는 보장은 없다. 숨은 제3의 변수(교란 변수)일 수 있다.

직선이 안 맞는 데이터

포물선·주기 패턴에 억지로 직선을 대면 R²가 낮다. 잔차 그래프에 패턴이 보이면 모델을 바꿔야 한다는 신호.

1973년 앤스컴 콰르텟: 평균·분산·회귀직선·R² 가 똑같은 네 데이터셋이 그래프로는 완전히 다르게 생겼다. 숫자만 보지 말고 반드시 그림을 그려 보라는 교훈.