1 개요
이전 포스트에서 단순 선형 회귀(SLR)의 전체 지형을 조망했다. 이 포스트는 그 지형의 첫 건축물인 최소제곱 추정량을 통계적 가정 없이 순수한 수학적 최적화 문제로서 엄밀히 유도한다.
Casella & Berger(2002, §11.3.1)의 제목 “A Mathematical Solution” 이 시사하는 바는 중요하다. 이 절에서는 확률도, 분포도, 오차의 성질도 가정하지 않는다. 단지 점들의 집합 \((x_i, y_i)\) 가 주어졌을 때 “이 점들을 가장 잘 지나는 직선은 무엇인가” 라는 결정론적 질문을 던지고, 그 답을 구한다. 확률적 해석(BLUE, 분포, 검정)은 후속 포스트(SLR 추론)에서 다룬다.
분포 가정 없이 유도하는 것의 이점은 두 가지다. 첫째, 추정과 추론의 논리적 분리를 명확히 한다 — 같은 \(\hat\beta\) 가 다양한 확률적 가정 하에서 재해석된다. 둘째, 최소제곱이 통계학 밖에서도 신호 처리, 수치 해석, 기하학적 피팅 등 다양한 분야에서 쓰이는 이유를 이해할 수 있다.
2 문제의 결정론적 정식화
2.1 데이터와 목표
\(n\) 개의 점 \((x_1, y_1), (x_2, y_2), \ldots, (x_n, y_n)\) 이 주어졌다. 여기서 \(x_i, y_i \in \mathbb{R}\) 는 단순히 실수 쌍이다. 확률변수도, 표본도 아니고, 관측 노이즈에 대한 어떤 가정도 없다.
목표: 직선 \(y = a + bx\) 중에서 “점들에 가장 잘 맞는” 것을 찾는다.
2.2 “가장 잘 맞는” 의 정의가 필요하다
“가장 잘 맞는다” 는 개념은 수학적으로 정의되어 있지 않다. 우리는 이를 손실 함수(loss function)로 정의해야 한다. 가장 흔한 네 가지 정의:
| 이름 | 목적함수 | 이름 |
|---|---|---|
| L2 (제곱) | \(\sum_{i=1}^n (y_i - a - b x_i)^2\) | Ordinary Least Squares |
| L1 (절대값) | \(\sum_{i=1}^n \lvert y_i - a - b x_i \rvert\) | Least Absolute Deviations (LAD) |
| L\(\infty\) (최대값) | \(\max_i \lvert y_i - a - b x_i \rvert\) | Chebyshev / minimax |
| 수직 거리 | \(\sum_{i=1}^n \frac{(y_i - a - b x_i)^2}{1 + b^2}\) | Total Least Squares |
이 중 어느 것도 “자연의 법칙” 이 아니다. 각자 장단점이 있다. 그런데 L2(제곱) 가 역사적·수학적으로 압도적으로 많이 쓰인다. 왜 그런가?
3 왜 L2 (제곱 손실) 인가
L2 가 지배적인 이유는 세 겹으로 쌓여 있다. 첫째, 수학적 편의 — 미분 가능하여 닫힌 해가 존재한다. 둘째, 통계적 연결 — 정규분포 오차를 가정하면 MLE 가 L2 최소화와 일치한다. 셋째, 기하학적 자연스러움 — 유클리드 거리가 곧 L2 이다. 이 세 이유가 독립적으로 L2 를 지지하므로, 어느 하나가 무너져도 나머지 둘이 버틴다.
3.1 이유 1: 미분 가능성
제곱 함수 \(f(r) = r^2\) 은 모든 점에서 미분 가능하고, 도함수 \(f'(r) = 2r\) 도 연속이다. 반면 절대값 \(|r|\) 은 \(r = 0\) 에서 미분 불가능하다. 미분 가능성은 닫힌 해(closed-form)의 존재를 가능하게 한다 — 미분 = 0 의 1계 조건을 풀면 명시적 공식이 나온다.
3.2 이유 2: 큰 잔차에 큰 페널티
제곱 함수는 \(r\) 이 커질수록 기울기가 급격히 증가한다(\(f'(r) = 2r\)). 이는 “큰 오차를 작은 오차보다 훨씬 심각하게 본다” 는 철학이다. 한 점이 10 떨어져 있다면 한 점이 1 떨어져 있는 것의 \(10^2 = 100\) 배로 페널티를 준다.
이 성질이 양날의 검이다. 장점은 “큰 편차를 줄이려는 강한 유인”, 단점은 “이상치에 매우 민감”.
3.3 이유 3: 유클리드 기하학과의 일치
\(\sum (y_i - \hat{y}_i)^2 = \|\mathbf{y} - \hat{\mathbf{y}}\|_2^2\) 는 \(n\) 차원 유클리드 공간에서의 거리의 제곱이다. 따라서 최소제곱은 “예측 벡터를 관측 벡터에 유클리드적으로 가장 가까이 놓는” 문제로 재해석된다. 이는 피타고라스 정리, 직교 투영 등 유클리드 기하학의 도구 전체를 사용 가능하게 만든다.
3.4 이유 4: 평균의 최적성
상수 \(c\) 로 \(n\) 개 점 \(y_i\) 를 근사할 때:
- L2 최소화 → $c = $ 평균 \(\bar{y}\)
- L1 최소화 → $c = $ 중앙값 median
- L\(\infty\) 최소화 → \(c = (\max y + \min y)/2\) — midrange
평균이 수학적으로 가장 다루기 쉬운 요약 통계이므로, L2는 자연스럽게 선호된다.
3.5 이유 5: 볼록성과 유일성
\(f(r) = r^2\) 은 엄밀하게 볼록(strictly convex)하다. 볼록 함수의 합도 볼록이므로, \(\sum (y_i - a - b x_i)^2\) 은 \((a, b)\) 의 엄밀 볼록 함수이다. 이는 전역 최솟값이 유일하게 존재함을 보장한다 (\(S_{xx} > 0\) 조건 하에서).
반면 L1 은 볼록하지만 엄밀 볼록이 아니다 — 해가 유일하지 않을 수 있고, 닫힌 해도 없다 (선형계획법 또는 반복 알고리즘으로 풀어야 함).
3.6 반박: 그래도 L1 이 나은 경우
이상치가 많은 데이터에서는 L1 이 훨씬 강건하다. 한 점이 극단값이라도 L1 은 영향을 받지 않지만, L2 는 전체 직선이 끌려간다. “제곱이 항상 옳다”가 아니라 “제곱이 수학적으로 편리하고 정규 오차 가정과 맞다” 로 이해해야 한다.
제곱 손실의 우위는 자연의 선택이 아니라 수학적 편의성 + 유클리드 기하학 + 평균 통계량 이라는 세 가지 수학적 매력의 합성이다. 19세기 Legendre 와 Gauss 가 L2 를 선택한 것은 부분적으로 해의 존재성과 계산 가능성 때문이었다.
현대에는 L1(LASSO), Huber, quantile regression, 비대칭 손실 등이 각자의 목적에 맞게 사용된다. OLS 는 기본값일 뿐 유일한 정답이 아니다.
4 유도 1: 미적분 (스칼라 형태)
4.1 목적함수
\[ S(a, b) = \sum_{i=1}^{n} (y_i - a - b x_i)^2 \]
이를 \((a, b)\) 에 대해 최소화한다.
4.2 편미분과 1계 조건
\[ \frac{\partial S}{\partial a} = -2 \sum_{i=1}^{n} (y_i - a - b x_i) = 0 \]
\[ \frac{\partial S}{\partial b} = -2 \sum_{i=1}^{n} x_i (y_i - a - b x_i) = 0 \]
상수 \(-2\) 를 제거하면 정규방정식(normal equations):
\[ \sum_{i=1}^{n} y_i = n a + b \sum_{i=1}^{n} x_i \tag{1} \]
\[ \sum_{i=1}^{n} x_i y_i = a \sum_{i=1}^{n} x_i + b \sum_{i=1}^{n} x_i^2 \tag{2} \]
4.3 닫힌 해의 유도
식 (1)을 \(n\) 으로 나누면:
\[ \bar{y} = a + b \bar{x} \quad \Rightarrow \quad a = \bar{y} - b \bar{x} \tag{3} \]
이는 이미 중요한 결과다: 회귀직선은 반드시 점 \((\bar{x}, \bar{y})\) 를 지난다. 이는 기울기 \(b\) 가 얼마이든 관계없이 성립한다.
식 (3)을 (2)에 대입:
\[ \sum x_i y_i = (\bar{y} - b\bar{x}) \sum x_i + b \sum x_i^2 \]
\[ \sum x_i y_i - \bar{y} \sum x_i = b\!\left(\sum x_i^2 - \bar{x} \sum x_i\right) \]
\(\sum x_i = n\bar{x}\) 를 사용하면:
\[ \sum x_i y_i - n \bar{x} \bar{y} = b\!\left(\sum x_i^2 - n\bar{x}^2\right) \]
양변을 \(S_{xx}, S_{xy}\) 표기로 정리:
\[ S_{xy} = b \cdot S_{xx} \]
여기서:
\[ S_{xx} = \sum_{i=1}^{n} (x_i - \bar{x})^2 = \sum x_i^2 - n\bar{x}^2 \]
\[ S_{xy} = \sum_{i=1}^{n} (x_i - \bar{x})(y_i - \bar{y}) = \sum x_i y_i - n \bar{x} \bar{y} \]
따라서:
\[ \boxed{\hat{b} = \frac{S_{xy}}{S_{xx}}, \quad \hat{a} = \bar{y} - \hat{b} \bar{x}} \]
\(S_{xx} > 0\) 이 필요하다. 이는 \(x\) 값들이 모두 같지 않다 는 조건과 동치이다. 모든 \(x_i\) 가 같으면 기울기를 정의할 수 없다 — 기하학적으로 수직선이 되기 때문이다.
4.4 2계 조건 (최소임을 확인)
Hessian 행렬:
\[ \mathbf{H} = \begin{pmatrix} 2n & 2\sum x_i \\ 2\sum x_i & 2\sum x_i^2 \end{pmatrix} \]
대각 원소 \(2n > 0\), 행렬식:
\[ 4 n \sum x_i^2 - 4 \left(\sum x_i\right)^2 = 4 n \sum (x_i - \bar{x})^2 = 4 n S_{xx} > 0 \]
양의 정부호(positive definite)이므로 \(S\) 는 엄밀 볼록, \((\hat{a}, \hat{b})\) 는 유일한 전역 최솟값.
5 유도 2: 선형대수 (행렬 형태)
5.1 행렬 표기
관측 벡터와 설계행렬을 정의한다:
\[ \mathbf{y} = \begin{pmatrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{pmatrix}, \quad \mathbf{X} = \begin{pmatrix} 1 & x_1 \\ 1 & x_2 \\ \vdots & \vdots \\ 1 & x_n \end{pmatrix}, \quad \boldsymbol{\beta} = \begin{pmatrix} a \\ b \end{pmatrix} \]
목적함수는:
\[ S(\boldsymbol{\beta}) = \|\mathbf{y} - \mathbf{X}\boldsymbol{\beta}\|_2^2 = (\mathbf{y} - \mathbf{X}\boldsymbol{\beta})^\top (\mathbf{y} - \mathbf{X}\boldsymbol{\beta}) \]
5.2 벡터 미분
\[ \nabla_{\boldsymbol{\beta}} S = -2 \mathbf{X}^\top (\mathbf{y} - \mathbf{X}\boldsymbol{\beta}) = \mathbf{0} \]
이를 정리하면 행렬 형태 정규방정식:
\[ \mathbf{X}^\top \mathbf{X} \boldsymbol{\beta} = \mathbf{X}^\top \mathbf{y} \]
\(\mathbf{X}^\top \mathbf{X}\) 가 가역이면:
\[ \boxed{\hat{\boldsymbol{\beta}} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y}} \]
이 역행렬이 존재하려면 \(\mathbf{X}\) 의 열들이 선형독립이어야 한다. 직관적으로: 설계행렬의 열은 상수 열 \(\mathbf{1}\) 과 \(x\) 값 열이다. 만약 모든 \(x_i\) 가 같다면 \(x\) 열이 상수 열의 상수배가 되어 두 열이 같은 방향을 가리킨다 — 두 방향이 합쳐지면 하나의 방향만 남으므로 절편과 기울기를 동시에 결정할 수 없다. 이것이 ’ \(x\) 에 변동이 있어야 회귀가 가능하다’의 수학적 근거이다.
5.3 스칼라 해와의 동치 확인
\(\mathbf{X}^\top \mathbf{X}\) 를 전개하면:
\[ \mathbf{X}^\top \mathbf{X} = \begin{pmatrix} n & \sum x_i \\ \sum x_i & \sum x_i^2 \end{pmatrix} \]
\[ \mathbf{X}^\top \mathbf{y} = \begin{pmatrix} \sum y_i \\ \sum x_i y_i \end{pmatrix} \]
\(2 \times 2\) 역행렬:
\[ (\mathbf{X}^\top \mathbf{X})^{-1} = \frac{1}{n S_{xx}} \begin{pmatrix} \sum x_i^2 & -\sum x_i \\ -\sum x_i & n \end{pmatrix} \]
곱셈을 전개하면 정확히 \(\hat{a} = \bar{y} - \hat{b}\bar{x}, \hat{b} = S_{xy}/S_{xx}\) 가 나온다.
5.4 일반화의 이점
행렬 형태는 변수가 몇 개이든 같은 공식으로 작동한다:
\[ \hat{\boldsymbol{\beta}} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y} \]
\(\mathbf{X}\) 가 \(n \times 1\) (절편 없음), \(n \times 2\) (SLR), \(n \times p\) (다중회귀) 이든 무관하다. 스칼라 유도는 SLR 에만 국한되지만, 행렬 유도는 모든 선형 모형의 통합 해법이다.
6 유도 3: 기하학 (직교 투영)
6.1 열공간과 투영
\(\mathbf{X}\) 의 열공간(column space)은 \(\mathbf{X}\) 의 열벡터들로 생성되는 \(\mathbb{R}^n\) 의 부분공간이다. SLR 에서는 \(\text{Col}(\mathbf{X}) = \text{span}(\mathbf{1}, \mathbf{x})\), 차원 2.
이 부분공간에 속하는 모든 벡터는 \(\mathbf{X}\boldsymbol{\beta}\) 형태이다. 최소제곱 문제는:
\(\mathbf{y}\) 에 가장 가까운 \(\text{Col}(\mathbf{X})\) 의 원소를 찾아라.
유클리드 공간에서 부분공간에 가장 가까운 점은 직교 투영이다.
6.2 직교성 조건
잔차 \(\mathbf{e} = \mathbf{y} - \mathbf{X}\hat{\boldsymbol{\beta}}\) 가 \(\text{Col}(\mathbf{X})\) 와 직교해야 한다:
\[ \mathbf{X}^\top \mathbf{e} = \mathbf{0} \]
\[ \mathbf{X}^\top (\mathbf{y} - \mathbf{X}\hat{\boldsymbol{\beta}}) = \mathbf{0} \]
이것이 정규방정식이다. 미분도, 편미분도 사용하지 않고 기하학적 직교성만으로 같은 결과를 얻는다.
왜 직교가 최소 거리를 보장하는가? 유클리드 기하에서, 외부 점에서 평면까지의 최단 경로는 수선(perpendicular)이다. 잔차 벡터 \(\mathbf{e}\) 가 열공간에 수직이 아니라면, 열공간 방향의 성분이 남아 있어 그 방향으로 \(\hat{\mathbf{y}}\) 를 조금 움직이면 \(\|\mathbf{e}\|\) 를 더 줄일 수 있다. 수직이면 이런 개선 여지가 없다 — 이것이 피타고라스 정리의 최적성 버전이다.
6.3 사영행렬 (Hat Matrix)
예측값:
\[ \hat{\mathbf{y}} = \mathbf{X}\hat{\boldsymbol{\beta}} = \mathbf{X}(\mathbf{X}^\top\mathbf{X})^{-1}\mathbf{X}^\top \mathbf{y} = \mathbf{H}\mathbf{y} \]
\(\mathbf{H} = \mathbf{X}(\mathbf{X}^\top\mathbf{X})^{-1}\mathbf{X}^\top\) 는 사영행렬(projection matrix, hat matrix). 이 행렬은 세 가지 성질을 가진다:
- 대칭: \(\mathbf{H}^\top = \mathbf{H}\)
- 멱등: \(\mathbf{H}^2 = \mathbf{H}\) (한 번 투영한 것을 다시 투영해도 같다)
멱등성( \(\mathbf{H}^2 = \mathbf{H}\) )의 의미: 사영을 두 번 해도 한 번 한 것과 같다. 점을 평면 위에 내려놓으면 이미 평면 위에 있으므로, 다시 내려놓아도 움직이지 않는다. 이 성질이 ’사영(projection)’이라는 이름의 이유이다.
- \(\text{Col}(\mathbf{X})\) 에 투영: \(\mathbf{H}\mathbf{X} = \mathbf{X}\)
잔차 생성행렬 \(\mathbf{M} = \mathbf{I} - \mathbf{H}\) 도 같은 성질을 가지며, \(\mathbf{M}\mathbf{y} = \mathbf{y} - \hat{\mathbf{y}} = \mathbf{e}\) 를 생성한다.
\(\mathbf{H}\) 와 \(\mathbf{M}\) 은 상호 직교 보완(orthogonal complement) 관계:
\[ \mathbf{H} + \mathbf{M} = \mathbf{I}, \quad \mathbf{H}\mathbf{M} = \mathbf{0} \]
이 분해가 131 포스트의 Cochran 정리와 제곱합 분해의 기초이다.
6.4 기하학적 유도가 주는 통찰
미적분 유도는 “미분 = 0” 이라는 공식적 절차이지만, 기하학 유도는 해가 유일하게 존재하는 이유 를 직관적으로 보여준다. 부분공간에 가장 가까운 점은 항상 유일하고, 그것은 직교 투영이라는 사실은 유한차원 힐베르트 공간에서 기본 정리이다.
또한 이 관점에서 OLS 는 “가장 좋은 선형 근사” 라는 자연스러운 의미를 획득한다. 통계적 해석(BLUE, 정규 오차 하의 MLE)은 이 기하학적 사실의 이차적 해석이며, 최소제곱 자체는 분포 가정 없이 독립적으로 존재한다.
7 해의 대수적 성질
다음 성질들은 모두 분포 가정 없이 성립하며, 순전히 최소제곱 최적화의 1계 조건에서 나온다.
7.1 성질 1: 잔차의 합은 0
정규방정식의 첫 식 \(\sum (y_i - \hat{a} - \hat{b} x_i) = 0\) 에서:
\[ \sum_{i=1}^{n} e_i = 0 \]
의미: 회귀직선은 잔차를 평균적으로 0이 되도록 배치한다. 이는 절편을 포함한 모든 모형에서 성립하며, 절편 없는 모형(\(y = bx\))에서는 일반적으로 성립하지 않는다.
7.2 성질 2: 잔차와 설명변수의 내적 0
정규방정식의 두 번째 식:
\[ \sum_{i=1}^{n} x_i e_i = 0 \]
의미: 잔차는 \(x\) 와 선형 상관이 0이다. 즉, 잔차에 \(x\) 의 선형 정보가 남아 있지 않다. 이것이 “최적 선형 적합” 의 의미다. 비선형 정보는 여전히 남을 수 있다.
7.3 성질 3: 회귀직선은 평균점 통과
\(\hat{a} = \bar{y} - \hat{b}\bar{x}\) 에서 바로:
\[ \bar{y} = \hat{a} + \hat{b}\bar{x} \]
즉, \((\bar{x}, \bar{y})\) 는 회귀직선 위에 있다. 이는 데이터의 “중심” 을 회귀선이 지난다는 직관과 일치한다.
7.4 성질 4: 예측값의 평균 = 관측값의 평균
\(\sum e_i = 0\) 이므로 \(\sum \hat{y}_i = \sum y_i\), 따라서 \(\bar{\hat{y}} = \bar{y}\). 예측값들의 평균은 관측값들의 평균과 같다.
7.5 성질 5: 제곱합 분해
잔차가 열공간과 직교이므로 (피타고라스):
\[ \|\mathbf{y} - \bar{y}\mathbf{1}\|^2 = \|\hat{\mathbf{y}} - \bar{y}\mathbf{1}\|^2 + \|\mathbf{e}\|^2 \]
\[ \mathrm{SST} = \mathrm{SSR} + \mathrm{SSE} \]
131 포스트에서 다룬 이 분해는 분포 가정 없는 순수 기하학이다.
7.6 성질 6: \(R^2\) 의 정의
\[ R^2 = 1 - \frac{\mathrm{SSE}}{\mathrm{SST}} = \frac{\mathrm{SSR}}{\mathrm{SST}} \]
\(0 \leq R^2 \leq 1\) 이며, 이 부등식은 피타고라스에서 바로 나온다. 확률론이 전혀 필요 없다.
| 얻는 것 (순수 수학) | 못 얻는 것 (분포 필요) |
|---|---|
| 점추정 \(\hat\beta\) | 표준오차 |
| 예측값 \(\hat{y}\) | 신뢰구간, 예측구간 |
| 잔차 \(e_i\) | \(t\), \(F\), \(\chi^2\) 검정 |
| \(R^2\) | p-value |
| SST 분해 | BLUE, UMVUE 주장 |
| 기하학적 직교성 | 최대가능도 해석 |
OLS 는 “확률적 추정” 이 아니라 결정론적 최적화 이다. 확률 언어는 이 결과를 재해석 할 때 도입된다.
8 해의 유일성 조건
8.1 스칼라 형태
\(\hat{b} = S_{xy}/S_{xx}\) 의 유일성은 \(S_{xx} > 0\) 에 달려 있다.
\[ S_{xx} = 0 \iff x_1 = x_2 = \cdots = x_n \]
즉, 모든 \(x_i\) 가 같으면 해가 유일하지 않다. 기하학적으로: 수직선 \(x = \bar{x}\) 위에 점들이 쌓여 있을 때, 어떤 기울기의 직선도 같은 오차를 낸다.
8.2 행렬 형태
\(\hat{\boldsymbol{\beta}} = (\mathbf{X}^\top\mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y}\) 는 \(\mathbf{X}^\top\mathbf{X}\) 가 가역해야 한다. 이는 \(\mathbf{X}\) 가 전열 랭크(full column rank)인 것과 동치이다.
다중회귀에서는 이 조건이 “설명변수들이 선형 독립” 과 동치이다. 완전 다중공선성 (perfect multicollinearity)이 있으면 \(\mathbf{X}^\top\mathbf{X}\) 가 비가역이 되어 유일한 해가 없다.
8.3 준-유일성: 최소 노름 해
\(\mathbf{X}\) 가 랭크 부족일 때도 해 집합은 존재한다(비가역이 해 없음을 뜻하지 않음). 무한히 많은 해 중 노름이 가장 작은 해는 유일하며, 이는 Moore-Penrose 유사역행렬 \(\mathbf{X}^+\) 를 통해 표현된다:
\[ \hat{\boldsymbol{\beta}} = \mathbf{X}^+ \mathbf{y} \]
SLR 에서는 \(x\) 값이 모두 같지 않으면 이 문제가 생기지 않지만, 다중회귀와 고차원 통계학 에서 필수 개념이다.
9 수치적 고려사항
9.1 정규방정식을 직접 풀면 안 되는 이유
\[ \hat{\boldsymbol{\beta}} = (\mathbf{X}^\top \mathbf{X})^{-1} \mathbf{X}^\top \mathbf{y} \]
이 공식은 수학적으로 정확하지만 수치적으로 불안정하다. 이유:
\[ \kappa(\mathbf{X}^\top\mathbf{X}) = \kappa(\mathbf{X})^2 \]
조건수(condition number)는 행렬이 얼마나 ‘찌그러져’ 있는지를 측정한다. 조건수가 큰 행렬을 역산하면, 입력의 작은 반올림 오차가 출력에서 크게 증폭된다. \(\mathbf{X}^\top\mathbf{X}\) 를 형성하면 조건수가 제곱되므로, 원래 약간 찌그러진 문제가 심하게 찌그러진 문제로 변한다. QR 분해는 \(\mathbf{X}\) 를 직접 분해하여 이 제곱을 피한다.
\(\mathbf{X}^\top\mathbf{X}\) 의 조건수는 \(\mathbf{X}\) 의 조건수의 제곱이다. \(\mathbf{X}\) 의 조건수가 \(10^4\) 이면 \(\mathbf{X}^\top\mathbf{X}\) 의 조건수는 \(10^8\) — 배정밀도 부동소수점의 정밀도 한계에 가까워진다. 역행렬 계산에서 유효숫자가 대량으로 손실될 수 있다.
9.2 QR 분해
수치적으로 안정한 방법은 QR 분해를 사용하는 것이다:
\[ \mathbf{X} = \mathbf{Q}\mathbf{R} \]
여기서 \(\mathbf{Q}\) 는 직교 행렬(\(\mathbf{Q}^\top\mathbf{Q} = \mathbf{I}\)), \(\mathbf{R}\) 은 상삼각행렬이다.
\[ \mathbf{X}^\top\mathbf{X} = \mathbf{R}^\top\mathbf{Q}^\top\mathbf{Q}\mathbf{R} = \mathbf{R}^\top\mathbf{R} \]
\[ \mathbf{R}^\top\mathbf{R}\hat{\boldsymbol{\beta}} = \mathbf{R}^\top\mathbf{Q}^\top\mathbf{y} \]
\(\mathbf{R}\) 이 삼각행렬이므로 역대입(back-substitution)으로 해를 구한다. 조건수 손실이 없다.
numpy.linalg.lstsq, scipy.linalg.lstsq, R 의 lm() 은 모두 내부적으로 QR 을 사용한다.
9.3 SVD
더욱 강건한 방법은 특이값 분해(SVD):
\[ \mathbf{X} = \mathbf{U}\mathbf{\Sigma}\mathbf{V}^\top \]
유사역행렬:
\[ \mathbf{X}^+ = \mathbf{V}\mathbf{\Sigma}^+\mathbf{U}^\top \]
\(\mathbf{X}^+ \mathbf{y}\) 는 랭크 부족 상황에서도 최소 노름 해를 반환한다. 계산 비용은 QR 보다 높지만, 공선성이 심한 데이터에서 안정성이 가장 높다.
교육 목적으로는 \((\mathbf{X}^\top\mathbf{X})^{-1}\) 을 명시적으로 쓰지만, 실제 구현에서는 절대 사용하지 않는다. numpy.linalg.inv + 행렬곱 방식은 조건수 문제로 인해 정밀도가 떨어진다. 항상 lstsq 또는 solve 계열을 사용한다.
10 다른 손실 함수와의 비교
제곱 손실 외의 대안을 이해하면 OLS 의 위치를 더 잘 파악할 수 있다.
10.1 L1 (Least Absolute Deviations, LAD)
\[ \min_{a, b} \sum_{i=1}^n |y_i - a - b x_i| \]
- 장점: 이상치에 강건, 중앙값 모형
- 단점: 닫힌 해 없음, 선형계획법 필요, 해가 유일하지 않을 수 있음
- 통계적 해석: 오차가 라플라스 분포일 때의 MLE
- 수단: quantile regression 의 중앙값(50% 분위수) 버전
10.2 Huber 손실
\[ \rho(r) = \begin{cases} r^2/2 & |r| \leq k \\ k|r| - k^2/2 & |r| > k \end{cases} \]
작은 잔차는 L2, 큰 잔차는 L1. 미분 가능하면서 이상치에 강건. 현대 강건 통계학의 기본 도구.
10.3 기하학적 거리 (Total Least Squares)
\[ \min \sum_i d((x_i, y_i), \text{직선})^2 \]
점에서 직선까지의 수직 거리를 최소화한다. \(y\) 방향이 아닌 \((x, y)\) 평면에서의 거리. \(x\) 도 측정오차를 가질 때 적합하다. 주성분분석(PCA)과 깊이 연관된다.
10.4 정규화된 손실
\[ \min_{\boldsymbol{\beta}} \|\mathbf{y} - \mathbf{X}\boldsymbol{\beta}\|^2 + \lambda \|\boldsymbol{\beta}\|_2^2 \quad (\text{Ridge}) \]
\[ \min_{\boldsymbol{\beta}} \|\mathbf{y} - \mathbf{X}\boldsymbol{\beta}\|^2 + \lambda \|\boldsymbol{\beta}\|_1 \quad (\text{LASSO}) \]
고차원에서 계수에 제약을 추가. Ridge 는 닫힌 해, LASSO 는 볼록 최적화.
현대 통계학·머신러닝에서 “최소제곱” 은 OLS, WLS, GLS, Ridge, LASSO, Elastic Net, Robust regression, Total Least Squares 등을 포괄하는 가족(family) 이다. §11.3.1 의 OLS 는 이 가족의 원점이자 특수 경우다.
어떤 변형을 선택할 것인가는 데이터의 성질, 목적(예측/추론/해석), 계산 자원에 달려 있다. “OLS 가 기본값” 이라는 관행을 기계적으로 따르기 전에, 각 대안의 전제를 검토하는 습관이 필요하다.
11 코드 예시
11.1 Step 1: 세 가지 경로로 같은 해 확인
import numpy as np
np.random.seed(20260406)
n = 30
x = np.linspace(0, 10, n) + np.random.normal(0, 0.2, n)
y = 1.5 + 0.7 * x + np.random.normal(0, 1.0, n)
# ─── 경로 1: 스칼라 공식 ───
x_bar, y_bar = x.mean(), y.mean()
Sxx = np.sum((x - x_bar) ** 2)
Sxy = np.sum((x - x_bar) * (y - y_bar))
b1_scalar = Sxy / Sxx
a1_scalar = y_bar - b1_scalar * x_bar
print(f"[스칼라] a = {a1_scalar:.6f}, b = {b1_scalar:.6f}")
# ─── 경로 2: 정규방정식 (행렬) ───
X = np.column_stack([np.ones(n), x])
XtX = X.T @ X
Xty = X.T @ y
beta_matrix = np.linalg.solve(XtX, Xty) # inv 대신 solve — 수치 안정
print(f"[행렬] a = {beta_matrix[0]:.6f}, b = {beta_matrix[1]:.6f}")
# ─── 경로 3: QR 분해 (수치적으로 가장 안정) ───
Q, R = np.linalg.qr(X)
beta_qr = np.linalg.solve(R, Q.T @ y)
print(f"[QR] a = {beta_qr[0]:.6f}, b = {beta_qr[1]:.6f}")
# ─── 경로 4: lstsq (SVD 기반) ───
beta_lstsq, *_ = np.linalg.lstsq(X, y, rcond=None)
print(f"[lstsq] a = {beta_lstsq[0]:.6f}, b = {beta_lstsq[1]:.6f}")
# 네 경로 모두 거의 같은 결과11.2 Step 2: 대수적 성질 검증
# 앞 코드의 변수를 계속 사용
a_hat, b_hat = beta_lstsq
y_hat = a_hat + b_hat * x
residuals = y - y_hat
# 성질 1: 잔차의 합은 0
print(f"sum(e) = {residuals.sum():.2e}") # 0 에 매우 가까움
# 성질 2: 잔차와 x 의 내적 0
print(f"sum(x * e) = {(x * residuals).sum():.2e}")
# 성질 3: 회귀직선이 평균점 통과
print(f"a + b*x_bar = {a_hat + b_hat * x_bar:.6f}")
print(f"y_bar = {y_bar:.6f}")
# 성질 4: 예측값 평균 = 관측값 평균
print(f"mean(y_hat) = {y_hat.mean():.6f}")
print(f"mean(y) = {y.mean():.6f}")
# 성질 5: 제곱합 분해
SST = np.sum((y - y_bar) ** 2)
SSR = np.sum((y_hat - y_bar) ** 2)
SSE = np.sum(residuals ** 2)
print(f"\nSST = {SST:.4f}")
print(f"SSR = {SSR:.4f}")
print(f"SSE = {SSE:.4f}")
print(f"SSR + SSE = {SSR + SSE:.4f} (= SST?)")
# 성질 6: R²
R2 = 1 - SSE / SST
print(f"R^2 = {R2:.4f}")11.3 Step 3: 사영행렬과 직교 투영 시각화
import numpy as np
X = np.column_stack([np.ones(n), x])
H = X @ np.linalg.inv(X.T @ X) @ X.T # Hat matrix
M = np.eye(n) - H # Residual maker
# 멱등성 확인: H² = H
print(f"|H² - H|_F = {np.linalg.norm(H @ H - H):.2e}")
# 대칭성: H^T = H
print(f"|H^T - H|_F = {np.linalg.norm(H.T - H):.2e}")
# H + M = I
print(f"|H + M - I|_F = {np.linalg.norm(H + M - np.eye(n)):.2e}")
# H * M = 0
print(f"|H·M|_F = {np.linalg.norm(H @ M):.2e}")
# 대각 원소 (레버리지) 확인
leverages = np.diag(H)
print(f"\nmean(h_ii) = {leverages.mean():.4f} (이론값 = p/n = {2/n:.4f})")
print(f"max(h_ii) = {leverages.max():.4f}")
print(f"sum(h_ii) = {leverages.sum():.4f} (= rank = 2)")11.4 Step 4: L1 회귀와 비교
from scipy.optimize import linprog
import numpy as np
# L1 회귀를 선형계획법으로 풀기
# minimize sum(u_i + v_i)
# s.t. y_i - a - b*x_i = u_i - v_i, u_i, v_i >= 0
# 변수: [a, b, u_1, ..., u_n, v_1, ..., v_n]
c = np.concatenate([[0, 0], np.ones(n), np.ones(n)])
A_eq = np.zeros((n, 2 + 2*n))
for i in range(n):
A_eq[i, 0] = 1 # a
A_eq[i, 1] = x[i] # b
A_eq[i, 2 + i] = -1 # u_i
A_eq[i, 2 + n + i] = 1 # v_i
b_eq = y
bounds = [(None, None), (None, None)] + [(0, None)] * (2 * n)
result = linprog(c, A_eq=A_eq, b_eq=b_eq, bounds=bounds, method="highs")
a_l1, b_l1 = result.x[0], result.x[1]
print(f"L2 (OLS): a = {a_hat:.4f}, b = {b_hat:.4f}")
print(f"L1 (LAD): a = {a_l1:.4f}, b = {b_l1:.4f}")
# 이상치 하나 추가 후 재적합 — L1 의 강건성 확인
y_outlier = y.copy()
y_outlier[5] += 20 # 큰 이상치
# OLS 재적합
X_full = np.column_stack([np.ones(n), x])
beta_ols_out = np.linalg.lstsq(X_full, y_outlier, rcond=None)[0]
# LAD 재적합
b_eq_out = y_outlier
result_out = linprog(c, A_eq=A_eq, b_eq=b_eq_out, bounds=bounds, method="highs")
a_l1_out, b_l1_out = result_out.x[0], result_out.x[1]
print(f"\n이상치 추가 후:")
print(f"L2 (OLS): a = {beta_ols_out[0]:.4f}, b = {beta_ols_out[1]:.4f} — 크게 흔들림")
print(f"L1 (LAD): a = {a_l1_out:.4f}, b = {a_l1_out:.4f} — 안정")12 핵심 정리
| 관점 | 핵심 |
|---|---|
| 문제 정의 | \((x_i, y_i)\) 점들에 직선 적합 — 분포 가정 없음 |
| 손실 선택 | L2 (제곱) — 미분 가능, 유클리드, 평균, 볼록 |
| 스칼라 해 | \(\hat{b} = S_{xy}/S_{xx}\), \(\hat{a} = \bar{y} - \hat{b}\bar{x}\) |
| 행렬 해 | \(\hat{\boldsymbol{\beta}} = (\mathbf{X}^\top\mathbf{X})^{-1}\mathbf{X}^\top\mathbf{y}\) |
| 기하학 | \(\mathbf{y}\) 의 \(\text{Col}(\mathbf{X})\) 직교 투영 |
| 유일성 | \(S_{xx} > 0\) 또는 \(\mathbf{X}\) 전열 랭크 |
| 성질 (분포 무관) | \(\sum e_i = 0\), \(\sum x_i e_i = 0\), 평균점 통과, SST = SSR + SSE |
| 수치 안정 | QR 또는 SVD — 정규방정식 직접 금지 |
| 대안 손실 | L1 (LAD), Huber, TLS, Ridge, LASSO |
Casella 가 이 절에 “A Mathematical Solution” 이라는 제목을 붙인 이유는 명확하다: 최소제곱 자체는 통계학이 아니다. 이는 Legendre(1805)와 Gauss(1809)가 천문학과 측지학에서 개발한 순수 최적화 방법이며, 후에 통계적 해석이 덧붙여진 것이다.
이 관점을 이해하면 회귀분석 전체가 명확해진다:
- §11.3.1 (이 포스트): 최소제곱은 무엇인가 — 순수 수학
- §11.3.2: 최소제곱 해의 성질 — 여전히 분포 최소한
- §11.3.3: 분포 가정 추가 — 오차의 정규성
- §11.3.4: 추론 — t, F, 신뢰구간
- §11.3.5: 예측 구간
- §11.3.6: 동시 추론, 신뢰밴드
분포 가정은 점점 더해지는 층이다. 가장 기본인 §11.3.1 을 이 위에서 구분하여 이해하는 것이 회귀를 깊이 있게 다루는 출발점이다.
13 관련 주제
선행 지식
- Simple Linear Regression: Overview — 전체 로드맵
- 공분산과 상관계수 — \(S_{xy}\) 의 해석
- Partitioning Sums of Squares — SST 분해의 기하
후속 주제
- SLR: BLUE 와 Gauss-Markov 정리 — 분포 가정 추가의 첫 단계
- SLR: 추정량의 분포와 추론 — \(t\) 검정, 신뢰구간
- SLR: 예측 구간과 신뢰밴드 — §11.3.5–11.3.6
- Multiple Linear Regression — 행렬 형태의 진가
관련 개념
- 선형대수: 투영과 직교 — Hat matrix 의 기하
- 수치 최적화: QR 과 SVD — 수치 안정성
- LASSO 와 Ridge — 정규화된 최소제곱
- 강건 회귀 — L1, Huber, M-추정량