# 다항식 보간(Interpolations) 기초

#### 과적합 문제와 보간 차수 선택

보간(Interpolation)은 주어진 유한 개의 점들을 정확히 통과하는 함수를 구하는 문제로서, 전통적으로는 다항식 형태의 보간 함수를 자주 사용한다. 구체적으로, 서로 다른 실수 $x\_0, x\_1, \dots, x\_n$에서 측정된(또는 주어진) 함수값 $f(x\_0), f(x\_1), \dots, f(x\_n)$을 만족하는 다항식 $p\_n(x)$를 찾는 과정이다. 보간 이론에 따르면 차수 $n$ 이하인 하나의 다항식이 위 점들을 정확히 통과할 수 있음을 보장한다. 하지만, 차수가 커질수록 보간 다항식이 필요 이상으로 복잡해지면서 과적합(Overfitting)이 발생할 수 있다.

과적합은, 데이터(또는 관측값)를 너무 잘 맞추기 위해 분자(항의 개수)가 많은 모델, 여기서는 고차 다항식을 사용할 때 나타나는 현상으로서, 주어진 구간 밖에서는 예측 성능이 급격히 나빠지거나, 간격 내에서조차 불안정한 진동을 일으킨다. 전형적으로 Runge 현상(Runge phenomenon)이 알려진 사례로서, 고차 다항식을 등간격 노드에 대해 보간할 때, 구간 끝부분에서 매우 큰 오차 진동이 발생한다. 이는 과적합의 대표적 예시라 할 수 있다.

다항식 보간에서 차수 $n$의 영향력을 이해하기 위해, 먼저 보간 다항식의 일반 형태를 살펴볼 수 있다. 보간점이 $n+1$개일 때, 차수 최대 $n$의 다항식 $p\_n(x)$는 선형 독립인 기저 다항식들의 조합으로 표현된다. 예를 들어, 고전적으로 많이 이용하는 Lagrange 보간 다항식은 아래와 같다.

$$
\begin{align} p\_n(x)  &= \sum\_{k=0}^n f(x\_k), \ell\_k(x)\\\ell\_k(x)  &= \prod\_{\substack{0 \le j \le n \ j \neq k}} \frac{x - x\_j}{x\_k - x\_j} \end{align}
$$

위 식에서 $\ell\_k(x)$는 $k$번째 Lagrange 기저 다항식이다. 이처럼 이론적으로는 $n+1$개의 점을 완벽히 통과하는 다항식이 존재하지만, $n$이 너무 크면 보간 다항식이 점들 사이에서 심하게 흔들리는(**진동하는**) 양상을 띠게 된다. 수학적으로 보면 보간 구간에서 표본점 분포가 특정 방식(특히 등간격 분포)으로 되어 있을 때 진동 폭이 커지며, 이는 종종 극단적인 오차를 초래한다.

과적합은 단순히 "데이터 점 개수보다 고차 다항식을 사용하면 나타난다"라는 식의 기계적 판단으로 결정되는 것이 아니라, 실제로 주어진 데이터의 성격과 노드(샘플링 지점) 분포, 그리고 보간 구간에서의 함수 특성 등 여러 요소가 복합적으로 작용한다. 특히, 관측값이 많은 구간에 밀집되어 있거나, 함수가 매우 빠르게 변하는 구간이 존재하거나, 잡음(오차)이 포함된 데이터인 경우라면 보간 차수를 무턱대고 높이는 것은 치명적인 과적합을 부를 수 있다.

실제로 $n$이 너무 큰 상황에서 잡음 데이터를 완벽하게 지나치게 '설명'하게 되면, 이론적으로는 잔차(차이)가 0이지만 예측력은 크게 떨어지는 모델이 만들어진다. 따라서, 적절한 차수를 선택하여 노이즈와 본질적인 추세를 함께 고려하는 것이 중요하다. 보간의 맥락에서 "차수 선택" 문제는 단지 다항식의 차수만 고정하는 데 그치지 않고, 보간 노드의 배치 방식(등간격 대신 Chebyshev 노드 등)을 어떻게 설정하느냐도 매우 중요한 요인이다.

#### 노드 선택의 중요성

과적합 문제를 완화하기 위해서는 단순히 다항식의 차수를 낮추는 방법 외에, 보간 노드를 어떻게 배치하느냐가 중요한 이슈가 된다. 보간 노드를 등간격으로 선택하면, 차수가 증가했을 때 보간 다항식이 극단적으로 요동치는 Runge 현상이 발생할 가능성이 매우 커진다. 이와 달리 Chebyshev 노드와 같이 구간 양단에 더 조밀하게 배치되고 중앙부로 갈수록 간격이 벌어지는 방식으로 노드를 배치하면, $\[-1,1]$ 구간에서의 최악의 오차(최대 오차)를 상당 부분 줄일 수 있다. 이러한 사실은 Lebesgue 상수(Lebesgue constant)의 성장률로도 설명 가능하다.

Chebyshev 노드는 일반적으로 다음과 같이 정의된다. 구간이 $\[-1,1]$일 때 차수 $n$를 기준으로

$$
\begin{align} x\_k = \cos\Bigl(\frac{(2k+1)\pi}{2(n+1)}\Bigr), \quad k = 0, 1, \dots, n \end{align}
$$

이와 같이 선택된 점들은 구간 양단에 집중되어 있을 뿐 아니라, 보간 다항식이 $\[-1,1]$ 구간 전역에서 큰 진동이나 오차를 최소화하도록 해준다. 실제로 등간격 보간에 비해 Chebyshev 노드를 사용하면 다항식 차수가 커져도 오차가 비교적 안정적으로 유지된다. 이러한 노드 선택 전략은 곧바로 "보간 다항식의 외삽" 문제에서도 안정성을 확보하는 데 도움이 된다.

#### 보간 에러와 Lebesgue 상수

다항식 보간의 오차를 정량적으로 표현하려면 Lagrange 잔여항을 이용하거나, 혹은 Lebesgue 상수 개념을 활용한다. Lagrange 잔여항(또는 Peano 형태)으로 알려진 고전적인 보간 오차 표현식은 다음과 같이 쓸 수 있다.

$$
\begin{align} f(x) - p\_n(x)  = \frac{f^{(n+1)}(\xi)}{(n+1)!} , (x - x\_0)(x - x\_1)\dots(x - x\_n) \end{align}
$$

여기서 $\xi$는 $x$와 $x\_0,\dots,x\_n$ 사이 어딘가에 존재하는 값이다(Mean value theorem 형태). 이 식은 $f$가 $(n+1)$차 미분 가능하다고 가정해야 하며, 실제 응용 현장에서는 $f^{(n+1)}(\xi)$가 얼마나 큰지 불명확한 경우가 많다. 그럼에도 불구하고, 고차 보간에서 $n$이 커질 때 오차가 매우 커질 수 있다는 것을 시사한다.

보다 일반화된 보간 에러 해석으로서, Lebesgue 상수 $\Lambda\_n$를 들 수 있다. 보간 노드 ${x\_0, \dots, x\_n}$가 주어졌을 때,

$$
\Lambda\_n  = \max\_{x \in \[a,b]} \sum\_{k=0}^n \bigl|\ell\_k(x)\bigr|
$$

이때 $\ell\_k(x)$는 Lagrange 기저 다항식이다. Lebesgue 상수는 보간 과정에서 만들어지는 계수들이 얼마나 민감하게 변하는가(즉, 유도된 다항식이 얼마나 불안정하게 반응하는가)를 나타내는 지표다. 만일 $\Lambda\_n$가 커진다면(결국 보간 기저들의 진폭이 크거나, 혹은 서로 상쇄되지 않고 커지게 되면), 미세한 데이터 오차조차 보간 결과에 크게 반영되어 과적합이나 진동이 심해질 수 있다. 등간격 노드에서는 $\Lambda\_n$이 지수적으로 증가하는 반면, Chebyshev 노드를 사용하면 $\Lambda\_n$의 증가가 상대적으로 완만해진다.

#### 차수 선택 방법론

데이터가 잡음을 포함하지 않는 완벽한 값이라면, 이론적으로는 보간점을 모두 수용할 수 있는 차수의 다항식을 사용하더라도(즉, $n$이 데이터 개수 $-1$과 동일하더라도) 문제될 것이 없을 수도 있다. 그러나 실제 계산 및 측정 데이터에는 필연적으로 잡음이 포함되어 있다. 따라서, 너무 높은 차수를 선택할 경우, 잡음을 포함한 모든 점을 정확히 지나려는 과적합이 발생하여, 데이터가 주는 전반적인 추세를 제대로 반영하지 못한다.

이 문제를 방지하기 위한 대표적 방법 중 하나는, 보간이 아니라 근사(Regression)의 관점에서 해결하는 것이지만, 순수 보간 프레임워크 내에서도 다음과 같은 전략을 취할 수 있다. 우선, Chebyshev 노드를 사용하여 노드 배치를 최적화한다. 그 후, $n$을 서서히 증가시키며 보간 오차(예: 교차검증, 혹은 보간 후의 재구성 에러 등)를 모니터링해서, 과적합이 두드러지게 나타나기 전의 차수에서 멈춘다.

한편, $n$을 미리 낮춰 선택하는 방식 대신, 제한된 차수 범위 내에서 구간 분할 기법(piecewise polynomial) 같은 것을 활용하는 방식도 고려 가능하다. 이는 구간을 나누어 각각의 구간에서 저차 다항식을 보간하는 스플라인(Spline) 접근으로 확장된다. 스플라인을 사용하면 국부적(지역적)으로 낮은 차수를 유지하므로, 전체 구간 내에서 급격한 진동 현상을 상당히 억제하면서도 비교적 정확한 근사를 제공할 수 있다.

#### 고차 보간의 안정성 문제와 대안적 접근

고차 다항식 보간에서 나타나는 과적합 현상은 단순히 노드 선택 문제를 뛰어넘어, 전체 계산 과정에서의 수치적 안정성과도 직결된다. 수치해석 관점에서, 보간 다항식의 계수를 구하기 위해 구성되는 보간 행렬(Vandermonde 행렬 등)은 차수가 커질수록 매우 큰 조건수(condition number)를 갖기 쉽다. 이는 미세한 데이터 교란(잡음 혹은 계산 오차)이 최종 보간 결과에 증폭되어 반영될 가능성을 의미한다.

등간격 노드로 구성한 Vandermonde 행렬은 고차(n이 큰 경우)에서 수치적으로 매우 불안정해진다. 실제 계산 시, 부동소수점 연산의 오차나 라운딩 에러(rounding error)가 축적되어, 보간 다항식 계수가 예상치 못하게 뚜렷한 오차를 갖게 되며, 결국 보간 함수 자체도 과적합과 함께 크고 빠른 진동을 일으킨다. Chebyshev 노드를 사용하면 Vandermonde 행렬의 조건수가 비교적 개선되지만, 차수가 지나치게 높은 상황에서는 여전히 오차 증폭 현상을 완벽히 피하긴 어렵다.

보다 실용적인 대안으로서, 스플라인(Spline) 보간이 있다. 스플라인은 구간을 여러 조각으로 나눈 뒤, 각 구간에서 비교적 낮은 차수의 다항식을 사용하되, 인접 구간 사이에서 경계 조건(연속성, 미분의 연속성 등)을 만족하도록 연결한다. 예를 들어 3차 스플라인(Cubic spline)을 사용하면, 인접한 스플라인 구간 간에 함수값과 1차, 2차 미분까지 연속한 형태를 만족하게 구성할 수 있다. 이러한 스플라인 접근은 고차 다항식 보간에서 흔히 발생하는 과적합, 극단적 진동 문제를 효과적으로 줄여준다. 또한, 각 구간에서 국소적으로 저차 보간을 수행하므로, 구간 하나가 조금 잘못되어도 전 구간에 치명적인 영향을 덜 미치는 이점이 있다.

스플라인 이외에도, 적응형 접근(adaptive approach)을 사용하는 방안이 있다. 예컨대, 먼저 저차의 보간(혹은 근사)을 시도해보고, 해당 모델의 오차가 큰 구간만 세분화하여 노드를 더 촘촘히 배치하거나, 지역적으로 차수를 증가시키는 방식이다. 이 경우, 보간 함수가 전역적으로 지나치게 복잡해지는 것을 방지하면서도, 필요에 따라 세부 구간에서 정밀도를 높이는 절충안을 얻을 수 있다.

실제 응용에서 다항식 보간을 수행할 때, 가장 핵심적으로 고려해야 할 사항은 다음과 같이 정리할 수 있다. 데이터 노드가 등간격으로 고정되어 있다면, 무턱대고 차수를 높이는 것보다, 노드 재배치(가능하다면)나 스플라인 같은 대체 방법을 검토해야 한다. 노이즈가 포함된 데이터를 정밀하게 모두 통과시키려 하기보다, 잡음을 적절히 무시하고 진짜 함수 형태를 포착하는 것이 모델의 예측력(또는 해석력)을 위해 바람직하다. 이때 고전적인 "보간" 정의(즉, 모든 점을 정확히 지나는 다항식) 대신, 최소제곱법 등의 근사 기법을 고려하는 것도 선택지 중 하나다.

이와 같은 다양한 방법론을 종합적으로 이해하고, 문제 상황에 따라 적절한 차수와 노드, 대안 기법을 선택하는 것이, 과적합 문제를 피하고 안정적이며 정확한 보간 함수를 구하는 열쇠다.

#### Newton 형태 보간에서의 안정성

Lagrange 보간은 직관적이고 단일 공식으로 정리되어 다루기 편리하지만, 계산 과정에서 각 기저 다항식의 값이 매우 커지는 현상을 제어하기가 어려울 수 있다. 이에 비해 Newton 형태 보간은 단계적으로 다항식 계수를 갱신해나가며 계산하므로, 상대적으로 수치적 안정성을 개선할 여지가 있다. Newton 보간 다항식은 다음과 같은 형태로 쓴다.

$$
\begin{align} p\_n(x)  &= a\_0 + a\_1 (x - x\_0) + a\_2 (x - x\_0)(x - x\_1) + \dots + a\_n \prod\_{j=0}^{n-1} (x - x\_j)\\
&= \sum\_{k=0}^n a\_k \prod\_{j=0}^{k-1} (x - x\_j) \end{align}
$$

이때 계수 $a\_k$들은 보간 데이터에 대한 전진 분할차분(forward divided difference)을 계산하여 순서대로 구할 수 있다. 예컨대

$$
\begin{align} a\_0 &= f(x\_0)\\
a\_1 &= \frac{f(x\_1)-f(x\_0)}{x\_1 - x\_0}\\
a\_2 &= \frac{\frac{f(x\_2)-f(x\_1)}{x\_2 - x\_1}-\frac{f(x\_1)-f(x\_0)}{x\_1-x\_0}}{x\_2 - x\_0} \end{align}
$$

등의 방식으로 확장해나간다. Newton 보간은 보간점이 하나씩 추가될 때마다 기존의 보간 다항식을 쉽게 갱신할 수 있기 때문에, 실시간 자료나 고차로 확장하는 과정에서 편리하다. 다만, 이 방법 역시 등간격 노드에서 차수가 높아지면 Vandermonde 행렬과 유사한 특성을 갖게 되므로, 근본적인 과적합이나 진동 문제를 제거하지는 않는다.

#### Barycentric 보간 공식

Lagrange 기저 다항식 $\ell\_k(x)$를 직접 계산하는 대신, Barycentric 형태로 보간 다항식을 표현하면 수치적으로 한층 더 안정적인 계산이 가능하다. Barycentric 보간 공식은 다음과 같다.

$$
\begin{align} p\_n(x)  &= \frac{\sum\_{k=0}^n \frac{w\_k,f(x\_k)}{x - x\_k}}{\sum\_{k=0}^n \frac{w\_k}{x - x\_k}} \end{align}
$$

여기서 $w\_k$는 고정된 보조 계수(무게)로서, 예컨대 Lagrange 기저의 분모 곱을 적절히 조합하여 정의된다. Chebyshev 노드를 사용하면 $w\_k$가 보다 간단한 형태로 표현될 수 있으며, 이때 $x$가 노드 중 하나에 정확히 일치하면 분수 형태 대신 $p\_n(x) = f(x\_k)$로 직접 처리하면 된다. Barycentric 방식은 연산 과정에서 동일한 부분이 여러 번 반복 계산되지 않아 오차 전파가 감소하고, 계수들의 크기도 덜 극단적으로 커진다.

#### Chebyshev 다항식과 근사 이론

Chebyshev 노드는 Chebyshev 다항식과 밀접한 관련이 있다. $T\_n(x)$라 불리는 $n$차 Chebyshev 다항식은 다음과 같은 특정 성질을 지닌다:

$$
T\_n(\cos \theta) = \cos(n\theta)
$$

이 다항식은 $\[-1,1]$ 구간에서 1과 -1 사이를 매우 빠르고 규칙적으로 오가며, 극댓값의 개수가 $n+1$개인 특징이 있다. Chebyshev 다항식이 최소화 문제, 예컨대

$$
\min\_{\deg(p)\le n} \max\_{x \in \[-1,1]} |p(x)|
$$

에서 최적해와 밀접하게 연결된다는 사실이 알려져 있다. 이러한 맥락에서, Chebyshev 노드를 사용한 보간이 비교적 작은 최대 오차를 보장한다는 이론적 근거가 마련된다. 실제로 Chebyshev 노드에서 구성되는 보간 다항식은 등간격 노드보다 훨씬 작은 Lebesgue 상수를 갖게 되어, 고차(n이 커질 때)라도 비교적 양호한 안정성을 유지한다.

Chebyshev 노드와 함께, Chebyshev 다항식을 응용한 근사 기법(예: Chebyshev 다항식의 보간 다항식, Chebyshev 다항식 기반의 빠른 변환 등)은 많은 응용 분야에서 유용하다. 예컨대 FFT(Fast Fourier Transform)의 변종으로서, Chebyshev 변환을 이용하여 다항식 근사를 가속화하는 방식 등이 있다.

#### 정규화(Regularization)의 적용

실제 노이즈가 포함된 데이터를 다항식 보간으로 그대로 맞추면, 과적합이 발생하기 쉽다. 이를 막기 위해, 보간보다는 회귀(Regression) 개념의 다항식 근사를 선호하기도 한다. 하지만 순수한 "보간" 틀 안에서도, $L\_2$ 페널티(Tikhonov 정규화)나 다른 방식으로 제어항을 첨가하여, 계수가 너무 커지지 않도록 제약하는 기법을 고민할 수 있다. 예컨대,

$$
\min\_{p\_n} \Bigl\[\sum\_{k=0}^n (p\_n(x\_k)-f(x\_k))^2 + \lambda ,|\mathbf{c}|^2 \Bigr]
$$

와 같은 형태로, 여기서 $\mathbf{c}$는 다항식 $p\_n(x)$의 계수 벡터, $\lambda$는 조절 상수이다. 이 경우, 보간의 잔차를 0으로 만드는 대신, 잔차와 계수 크기 사이에서 절충점을 찾는다. $\lambda$가 크면 과적합이 억제되지만, 데이터와의 오차가 다소 커질 수 있다. 다만, 이는 더 이상 "엄밀한 보간"의 범주를 벗어나므로, 실무적으로는 회귀로 부르는 편이 더 적절하다.

#### 스플라인의 일반화와 세분화 기법

스플라인은 다항식 보간의 대안으로 소개했지만, 필요에 따라 스플라인 자체를 더욱 세분화하거나, 여러 연결 구간별로 차수가 달라지도록 설정할 수도 있다. 이를 조각별 비균일 B-스플라인(Non-uniform B-spline) 형태로 확장하면, 노드 배치나 구간 분할을 상황에 맞게 동적으로 조정할 수 있다. 국부적 차수 증진(예: 특정 구간에서만 5차 등)을 통해 급격한 변화 구간에 대한 정확도를 높이는 기법도 가능하다.

이러한 조각별 접근(piecewise approach)은 전역적인 고차 다항식 보간이 야기하는 극단적 진동과 수치 불안정을 효과적으로 피할 수 있다. 스플라인의 매끄러움(1차 미분, 2차 미분 연속 조건 등)을 어떻게 부여하느냐에 따라, 데이터를 잇는 곡선이 보다 자연스럽게 연결되는 장점이 있다.

#### 고차 다항식 보간의 특수한 예외

반면, 어떤 경우에는 고차 보간이 실제로 의미 있게 쓰인다. 예컨대 다항식뿐 아니라 유리함수(Rational function) 보간을 사용하는 경우, 본질적으로 분자가 고차, 분모가 저차인 형식 등 다양한 형태의 근사/보간을 시도할 수 있다. 복소평면에서의 근사 이론, 파형 해석, 스펙트럼 해석 등에서는 고차 보간이 필연적인 선택지이기도 하다. 다만, 이때도 Chebyshev 노드 계열(혹은 그에 상응하는 복소평면에서의 노드 배치) 또는 적절한 정칙성(analyticity) 가정이 따라붙어야 안정적인 결과를 도출할 수 있다.

고차 다항식 보간을 반드시 써야 할 특별한 이유가 없다면, 과적합 문제와 수치 불안정을 피하기 위해 대안적 접근(스플라인, 저차 보간, 근사, 정규화 등)을 적극 고려하는 것이 일반적이다.

#### 교차검증(Cross-validation)과 차수 선택

노이즈가 섞인 유한 개의 데이터를 대상으로 다항식 보간을 수행할 때, 과적합을 회피하고 적절한 차수를 결정하기 위한 한 방법으로 교차검증 기법을 활용할 수 있다. 엄밀히 말하자면, 순수 보간 문제에서의 교차검증은 “본래 모든 점을 정확히 지나는 다항식을 어떻게 평가할 것인가”라는 아이러니가 있지만, 실제로는 일부 점을 의도적으로 보간 대상에서 제외한 뒤, 나머지 점에 대한 보간 다항식을 구하고, 제외한 점들을 예측에 사용해 오차를 측정함으로써 과적합 여부를 진단한다.

LOOCV(Leave-One-Out Cross Validation) 방식을 예로 들면, $n+1$개의 점 중에서 한 점 $(x\_i, f(x\_i))$만 빼고 나머지 $n$개의 점에 대해 차수 $n-1$ 이하의 보간 다항식을 구한다. 이어서 구해진 다항식을 $x\_i$에서 평가했을 때의 오차를 확인한다. 이를 $i=0,\dots,n$에 대해 반복해서 평균 오차를 얻으면, 해당 차수로의 보간이 전체적으로 어느 정도 “타당성”을 가지는지를 짐작할 수 있다. 차수를 1씩 증가시키면서 같은 작업을 수행하여, LOOCV 오차가 최소화되는 지점에서 차수를 결정한다.

물론, 이 과정은 데이터 개수만큼 반복 보간을 수행해야 하므로 계산량이 만만치 않을 수 있다. 하지만, Newton 보간이나 Barycentric 보간 같은 방식으로 점 하나를 빼고 다항식을 쉽게 갱신할 수 있다면, 실제 구현에서 계산을 크게 줄일 수 있다.

#### Python 예시 코드

아래 예시는 Python에서 LOOCV를 간단히 실험하는 코드 사례다. 등간격 노드에 샘플 함수를 취한 뒤, 차수를 달리하며 보간 다항식을 구성하고, 그때 LOOCV 평균 제곱오차(MSE)를 계산하는 과정을 보여준다. 실제 상황에서는 Chebyshev 노드나 다른 데이터 분포를 적용해볼 수도 있다.

```python
import numpy as np
import numpy.polynomial.polynomial as poly

def sample_function(x):
    return np.sin(2*x) + 0.1 * x**2

def poly_interpolate(x_data, y_data, degree, x_eval):
    # numpy.polynomial.polynomial.polyfit / polyval 활용
    c = poly.polyfit(x_data, y_data, deg=degree)
    return poly.polyval(x_eval, c)

# 예시: 등간격 노드 생성
n_points = 12
x_vals = np.linspace(-3, 3, n_points)
y_vals = sample_function(x_vals)

max_degree = n_points - 1  # 이론적 최대 차수
best_degree = 0
best_mse = float('inf')

for deg in range(1, max_degree+1):
    errors = []
    for i in range(n_points):
        # Leave-One-Out: i번째 점을 빼고 보간
        x_train = np.delete(x_vals, i)
        y_train = np.delete(y_vals, i)
        
        # i번째 점에서의 예측값
        y_pred = poly_interpolate(x_train, y_train, deg, x_vals[i])
        
        # 실제값과 비교하여 오차 계산
        errors.append((y_pred - y_vals[i])**2)
    
    mse = np.mean(errors)
    if mse < best_mse:
        best_mse = mse
        best_degree = deg

print("LOOCV 결과, 최적 차수 =", best_degree)
print("해당 차수의 LOOCV MSE =", best_mse)
```

이 코드에서는 $n\_\text{points}=12$개 등간격 노드에서 샘플 데이터를 얻고, 차수를 1부터 $n\_\text{points}-1$까지 바꿔가며 LOOCV 기준으로 MSE를 계산한다. 그중 최소값을 주는 차수를 “최적 차수”로 선택하도록 예시를 구성했다. 실제로는 $n\_\text{points}$가 훨씬 큰 데이터 세트에 대해서 이 방식을 적용하여, 너무 고차로 갈수록 LOOCV 오차가 오히려 커질 수 있음을 확인할 수 있다. 이는 과적합의 지표가 된다고 해석할 수 있다.

#### 다항식 보간과 최적 근사의 경계

보간이든 근사든, 실제 응용 맥락에서 중요한 것은 새로운 점에서의 예측 정확도(또는 근사 품질)다. 모든 점을 강제로 통과하는 다항식을 찾는 보간 방식은, 잡음이 없는 매우 이상적인 상황에서는 문제가 없지만, 노이즈가 있는 데이터에서는 위험하다. 교차검증이나 스플라인, 혹은 더 나아가 정규화 기법(회귀)에 이르는 여러 방법이 존재하는 이유가 바로 여기에 있다.

보간 과제에서 차수를 점진적으로 늘리면서 오차 변화를 추적해 보면, 처음에는 차수를 높일수록 오차가 작아지다가, 어느 순간부터 오차가 다시 커질 수 있다. 이는 $n$이 증가할수록 잡음을 지나치게 학습(Overfitting)하기 시작해서, 전반적인 예측 정확도가 악화되는 모습이다. 따라서, 지나치게 높은 차수는 적절치 않으며, 노드 배치를 포함해 여러 기술을 종합적으로 검토해야 한다.

스플라인, Chebyshev 노드, Barycentric 공식, Newton 계수 갱신, 교차검증 등은 모두 과적합을 막고 안정적인 보간 함수를 얻기 위한 상호 보완적 방법이다. 적절한 결합과 응용을 통해, 실제 문제에서 사용 가능한 범위 내에서 최선의 보간 혹은 근사 모델을 찾을 수 있다.
