비선형 회귀로 곡선·포화 패턴을 모델링하는 방법

비선형 회귀에서 다항 회귀, 로지스틱 성장 모델, 비선형 최소제곱을 선택하고 초기값·제약·검증·운영 전략을 설계하는 방법

2026-08-14 · 최초 발행 2024-04-29

곡선과 포화가 보일 때의 회귀 모델 선택

데이터가 직선적 추세를 벗어나 곡선을 그리거나 포화점에 가까워지고, 시간에 따라 S-커브 형태로 움직인다면 비선형 회귀를 검토할 시점이다. 핵심은 데이터의 형태와 해석에 필요한 수준에 맞춰 모델 프레임을 고르고, 적합 과정의 수렴 문제까지 설계에 포함하는 데 있다.

다항 회귀는 입력 특성을 다항식으로 늘린 뒤 선형 회귀 방식으로 계수를 구한다. 모델은 y ≈ β0 + β1x + β2x² + … + βdx^d 형태이며, 비선형 관계를 선형 회귀 프레임으로 다룰 수 있다. 파라미터 관점에서는 볼록 최적화 성질을 갖지만, 차수가 커질수록 과적합과 수치 불안정, 발산·진동 위험이 생길 수 있어 정규화와 스케일링이 필요하다.

로지스틱 성장 모델은 포화와 S-커브를 표현하는 데 적합하다. 기본식은 y(t) = K / (1 + A·e^(−r·t))이며, K는 포화수준, r은 성장률, A는 초기 조건과 관련된 상수다. 포화수준과 전환점처럼 해석에 쓸 수 있는 지표를 제공하지만, 비선형 파라미터 공간에서 동작하므로 초기 추정치와 경계조건의 영향이 크다.

일반 비선형 최소제곱은 함수 f(x; θ)와 관측값의 잔차 r_i = y_i − f(x_i; θ) 제곱합을 최소화한다. 목적함수는 min_θ Σ r_i(θ)^2다. 가우스–뉴턴, Levenberg–Marquardt(LM), Trust Region Reflective(TRF)가 대표적인 알고리즘이며, 수렴성·식별성·스케일링 전략이 결과를 좌우한다.

적합 전에 설계해야 할 조건

특성 확장으로 대응할지, 로지스틱처럼 구조를 가진 곡선을 명시할지부터 구분해야 한다. 다항 회귀는 패턴에 유연하게 반응하지만 고차수에서 불안정해질 수 있다. 로지스틱은 해석하기 쉽지만 표현 가능한 패턴에는 제약이 있다.

비선형 적합에서는 초기값, 파라미터 경계, 스케일링이 수렴성을 결정한다. 다중 시작(multi-start)이나 전역 탐색인 Differential Evolution을 지역 탐색인 LM/TRF와 조합할 수 있다. 잔차 노름, 파라미터 변화량, 최대 반복 횟수는 수렴 기준으로 관리하고, 수치 미분(Jacobian)의 안정화와 정칙화도 함께 고려한다.

노이즈와 헤테로스케다스틱에는 L2 정규화나 가중 최소제곱을 적용할 수 있다. K>0처럼 물리적 의미가 있는 값은 Bounds로 제한하며, 양수 또는 확률 제약은 로그·로지트 변환으로 연속 공간에서 다룰 수 있다.

검증 단계에서는 K-겹 교차검증과 잔차의 독립성·등분산성 점검, 고레버리지 포인트 탐지가 필요하다. 예측 구간과 부트스트랩은 불확실성을 정량화하는 수단이 된다. 이상치 영향이 크다면 Huber 또는 soft-L1 같은 강건 손실을 활용할 수 있다.

운영 환경에서는 배치 적합과 온라인 업데이트를 분리하고, 시드와 데이터·모델 버저닝으로 재현성을 확보한다. 잔차 분포 드리프트, 파라미터 변동률, 재적합 스케줄을 모니터링하며, 실패 시 사용할 폴백 모델도 미리 정한다.

입력부터 배포 판단까지의 흐름

입력으로는 원시 시계열 또는 단면 데이터, K 상한 같은 사업 제약, 초기값 후보를 받는다. 전처리에서 이상치를 필터링하고 스케일링과 가중치를 설계한 뒤, 다항 차수 또는 로지스틱·대안 곡선 후보를 비교한다.

최적화는 제약을 포함한 NLS(LM/TRF), 다중 시작, 강건 손실 옵션으로 수행한다. 교차검증과 잔차 진단, 예측 구간 산출을 거쳐 적합 파라미터와 RMSE·MAE·sMAPE 같은 성능 지표, 불확실성, 재학습 주기를 출력한다. 수렴하지 않으면 초기값 재시도, 알고리즘 교체, 모델 단순화 순으로 폴백한다.

⤢✕다항로지스틱기타 비선형성공비수렴예아니오입력: 데이터/초기값/제약전처리: 결측/이상치/스케일링모델 후보차수 탐색 d∈[1..k]초기값/경계 설정 K,r,A도메인 곡선 정의 f(x;θ)비선형 최소제곱최적화(LM/TRF)검증: CV/잔차/예측구간초기값 재시도·스케일링·강건손실배포 기준 충족?출력: 파라미터·지표·모니터링설정모델 단순화 폴백/데이터 추가

모델별 선택 기준

모델 성능(곡선적합) 확장성(특성수/데이터량) 일관성(수렴/재현성) 안정성(노이즈/이상치) 운영 편의
다항 회귀 중~고, 패턴 유연 고, 선형해 닫힘 높음, 볼록 문제 중, 고차수 민감 높음, 파이프라인 단순
로지스틱 성장 고, 포화·S-커브 강점 중, 비선형 최적화 비용 중, 초기값 의존 중~고, 강건 손실 유효 중, 파라미터 해석 용이
일반 NLS(사용자 정의) 케이스 의존, 최고 잠재 케이스 의존 케이스 의존, 국소해 리스크 강건-손실 설계 필요 중, 도메인 지식 요구

성장·수요·공정·운영 지표에 적용하는 방식

제품 또는 사용자 성장 예측에서는 로지스틱 모델로 월간 활성 사용자(MAU)의 포화 수준과 전환점을 추정하고, 캠페인 시나리오에 따른 성장률 r의 감응도를 분석할 수 있다.

할인율 증가에 따라 판매량 포화가 관측되는 수요·가격 관계에서는 로지스틱 또는 미하일리스-멘텐 형태를 적용할 수 있다. 가격 범위별 최적 포인트를 도출한 뒤 재고·공급 계획과 연결하는 방식이다.

바이오와 제조 공정에서는 세포 성장이나 반응 속도를 모델링해 배치 종료 시점을 최적화한다. 센서 노이즈가 존재하면 가중 또는 강건 NLS로 적합을 안정화할 수 있다.

운영 지표에서는 지연시간-부하 곡선의 비선형 구간을 포착해 용량 계획에 반영한다. 경계조건에 기반한 파라미터 제약은 과도한 예측을 막는 데 쓸 수 있다.

Python으로 적합과 수렴을 확인하기

전제조건은 Python 3.10+, numpy 1.26+, scipy 1.11+, scikit-learn 1.3+이며, 재현성 시드를 고정하고 예제 생성 방식의 데이터를 사용한다.

다항 회귀에서는 차수 선택과 정규화 파이프라인을 함께 구성한다.

# Python 3.10
import numpy as np
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.linear_model import Ridge
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.metrics import mean_absolute_error, mean_squared_error

rng = np.random.default_rng(42)
# 곡선 데이터 생성: y = 0.5x^3 - x^2 + 2x + noise
X = rng.uniform(-3, 3, size=400).reshape(-1, 1)
y = 0.5*X[:,0]**3 - 1.0*X[:,0]**2 + 2.0*X[:,0] + rng.normal(0, 2, size=X.shape[0])

X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.3, random_state=42)

pipe = Pipeline([
    ("poly", PolynomialFeatures(include_bias=False)),
    ("scale", StandardScaler(with_mean=False)),  # 다항항 희소성 고려
    ("ridge", Ridge(random_state=42))
])

param_grid = {
    "poly__degree": [2, 3, 4, 5],
    "ridge__alpha": [0.01, 0.1, 1.0, 10.0]
}
cv = GridSearchCV(pipe, param_grid, cv=5, scoring="neg_root_mean_squared_error", n_jobs=-1)
cv.fit(X_tr, y_tr)

y_pred = cv.best_estimator_.predict(X_te)
rmse = mean_squared_error(y_te, y_pred, squared=False)
mae = mean_absolute_error(y_te, y_pred)
print("Best params:", cv.best_params_)
print(f"Test RMSE={rmse:.3f}, MAE={mae:.3f}")

로지스틱 성장 모델은 curve_fit에 초기값과 경계를 전달해 NLS 적합을 수행한다.

import numpy as np
from scipy.optimize import curve_fit
from sklearn.metrics import mean_absolute_percentage_error

rng = np.random.default_rng(7)
t = np.linspace(0, 20, 80)
K_true, r_true, A_true = 100.0, 0.35, 5.0
def logistic(t, K, r, A):
    return K / (1 + A * np.exp(-r * t))

y_clean = logistic(t, K_true, r_true, A_true)
y = y_clean + rng.normal(0, 2.0, size=t.size)

# 초기값·경계 설정
p0 = [y.max()*1.1, 0.2, 1.0]
bounds = ([0.0, 0.0, 0.0], [np.inf, 5.0, np.inf])

p_opt, cov = curve_fit(logistic, t, y, p0=p0, bounds=bounds, maxfev=10000)
K_hat, r_hat, A_hat = p_opt
y_hat = logistic(t, *p_opt)
mape = mean_absolute_percentage_error(y, y_hat)

print(f"Estimated K={K_hat:.2f}, r={r_hat:.3f}, A={A_hat:.2f}, MAPE={mape*100:.2f}%")

강건 손실과 다중 시작이 필요한 경우에는 least_squares로 적합 결과 중 비용이 가장 낮은 결과를 선택한다.

import numpy as np
from scipy.optimize import least_squares

rng = np.random.default_rng(123)
t = np.linspace(0, 10, 60)
K_true, r_true, A_true = 50.0, 0.6, 3.0
def logistic(t, K, r, A):
    return K / (1 + A * np.exp(-r * t))

y = logistic(t, K_true, r_true, A_true) + rng.standard_t(df=3, size=t.size)  # 두꺼운 꼬리 노이즈

def residuals(theta):
    K, r, A = theta
    return logistic(t, K, r, A) - y

bounds = ([1e-3, 1e-6, 1e-6], [1e3, 5.0, 1e3])

best = None
for seed in [0, 1, 2, 3, 4]:
    rng2 = np.random.default_rng(seed)
    p0 = [y.max()*rng2.uniform(0.8, 1.5),
          rng2.uniform(0.05, 1.0),
          rng2.uniform(0.5, 5.0)]
    res = least_squares(residuals, p0=p0, bounds=bounds, loss="soft_l1", f_scale=1.0, max_nfev=20000)
    if best is None or res.cost < best.cost:
        best = res

K_hat, r_hat, A_hat = best.x
print("Converged:", best.success, "Message:", best.message)
print(f"Best cost={best.cost:.3f}, K={K_hat:.2f}, r={r_hat:.3f}, A={A_hat:.2f}")

입력 표준화, K/100 같은 파라미터 리스케일링, Jacobian 스케일 조정은 수치 안정화에 도움이 된다. 비수렴이 발생하면 초기값을 라틴하이퍼큐브 샘플링으로 구성하고, 경계를 완화한 다음 모델을 단순화하는 순서로 대응할 수 있다. 난수 시드, 데이터·코드 해시, 하이퍼파라미터 스냅샷도 기록한다.

정확도와 운영 안정성에 미치는 영향

곡선 또는 포화 패턴 데이터에서는 선형 모델 대비 RMSE가 10~30% 개선될 수 있으며, 효과는 도메인과 노이즈 수준에 의존한다. 로지스틱 모델의 K, r, 전환점은 전략 수립에 활용할 수 있는 해석 가능성을 제공한다.

강건 손실과 제약을 도입하면 이상치 민감도를 잔차 IQR 기준 2040% 완화할 수 있다. 재고와 캠페인 타이밍을 최적화하면 손실율이 515% 감소할 수 있다.

곡률·포화·S-커브가 데이터에 존재한다면 다항 회귀의 유연성, 로지스틱의 해석성, 일반 NLS의 표현력을 비교해 선택한다. 초기값·스케일링·제약·강건 손실을 포함한 최적화 설계와 교차검증·잔차 진단·폴백 체계가 함께 있어야 성능, 안정성, 재현성을 운영 환경에서도 유지할 수 있다.

비선형 회귀다항 회귀로지스틱 성장최소제곱모델 검증