설계행렬

AI
gemma-4-31b
작성자
익명
작성일
2026.07.15
조회수
7
버전
v1

설계행렬 (Design Matrix)

1. 개요

설계행렬(Design Matrix)란 통계학 및 선형 모델에서 독립 변수(Independent Variables, Features)들을 행렬 형태로 구조화하여 모델의 파라미터를 효율적으로 추정하기 위해 사용하는 행렬이다.

2. 수학적 정의 및 구조

설계행렬 $X$는 $n$개의 관측치(Observation)와 $p$개의 특성(Feature)을 가진 데이터셋에서 $n \times (p+1)$ 크기의 행렬로 정의된다. 여기서 $+1$은 절편(Intercept) 항을 위한 열을 포함한 것이다. 각 행은 하나의 데이터 샘플을 나타내며, 각 열은 해당 샘플의 특정 특성 값을 나타낸다.

2.1. 구조적 정의

일반적인 선형 모델 $y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \dots + \beta_p x_p + \epsilon$에서, 절편(Intercept, $\beta_0$)을 행렬 연산에 포함시키기 위해 설계행렬의 첫 번째 열에 모두 1을 채운 '1의 열(Column of ones)'을 추가한다.

$$X = \begin{bmatrix} 1 & x_{11} & x_{12} & \dots & x_{1p} \\ 1 & x_{21} & x_{22} & \dots & x_{2p} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n1} & x_{n2} & \dots & x_{np} \end{bmatrix}$$

2.2. 데이터셋의 변환 예시

다음은 3개의 관측치와 2개의 특성(나이, 소득)을 가진 데이터셋이 설계행렬로 변환되는 과정이다.

관측치 나이 ($x_1$) 소득 ($x_2$) $\rightarrow$ 설계행렬 $X$의 $i$번째 행
샘플 1 25 3000 $\rightarrow$ $\mathbf{x}_1 = [1, 25, 3000]$
샘플 2 30 4500 $\rightarrow$ $\mathbf{x}_2 = [1, 30, 4500]$
샘플 3 35 5000 $\rightarrow$ $\mathbf{x}_3 = [1, 35, 5000]$

3. 선형 모델에서의 활용

설계행렬은 선형 회귀 모델의 계수 $\beta$를 구하는 최적화 과정의 핵심이다.

3.1. 정규 방정식 (Normal Equation)

최소제곱법(Ordinary Least Squares, OLS)을 통해 잔차 제곱합을 최소화하는 파라미터 $\hat{\beta}$는 다음과 같은 정규 방정식을 통해 도출된다.

$$\hat{\beta} = (X^T X)^{-1} X^T y$$

여기서 $X^T$는 설계행렬의 전치행렬(Transpose), $y$는 종속 변수 벡터이다. 이 식은 $X^T X$의 역행렬이 존재할 때 성립한다.

3.2. 예측값 계산

학습된 계수 $\hat{\beta}$와 새로운 입력 데이터 $\mathbf{x}_{new}$ (절편 1을 포함한 벡터)를 내적함으로써 예측값 $\hat{y}$를 계산한다. $$\hat{y} = \mathbf{x}_{new}^T \hat{\beta}$$

4. 특수 설계행렬의 종류

데이터의 성격에 따라 설계행렬을 구성하는 방식이 달라진다.

4.1. 다항 회귀 (Polynomial Regression)

비선형 관계를 모델링하기 위해 기존 특성의 거듭제곱 항을 추가한다. 예를 들어 특성이 $x$ 하나일 때 2차 다항 회귀의 설계행렬은 $[1, x, x^2]$의 형태를 띤다.

4.2. 범주형 변수와 원-핫 인코딩 (One-hot Encoding)

범주형 데이터(예: 도시명 '서울', '부산', '대구')는 수치화할 수 없으므로, 각 범주를 새로운 열로 만들고 해당하면 1, 아니면 0을 부여하는 원-핫 인코딩을 사용한다. 이때 모든 범주 열을 다 넣으면 '더미 변수 함정(Dummy Variable Trap)'에 빠져 다중공선성이 발생하므로, 보통 $k-1$개의 열만 사용한다.

4.3. 구현 예시 (Python)

import pandas as pd
from sklearn.preprocessing import PolynomialFeatures

# 1. 원-핫 인코딩 예시
df = pd.DataFrame({'City': ['Seoul', 'Busan', 'Daegu']})
# 더미 변수 함정을 피하기 위해 첫 번째 범주 제거
design_matrix_cat = pd.get_dummies(df, drop_first=True)

# 2. 다항 특성 생성 예시
X = [[2], [3], [4]]
poly = PolynomialFeatures(degree=2, include_bias=True)
design_matrix_poly = poly.fit_transform(X)
# 결과: [[1, 2, 4], [1, 3, 9], [1, 4, 16]]

5. 실제 계산 사례

간단한 데이터셋 $y = [3, 5]^T$, $x = [1, 2]^T$ (단순 선형 회귀)의 계수를 구하는 과정이다.

  1. 설계행렬 구성: $X = \begin{bmatrix} 1 & 1 \\ 1 & 2 \end{bmatrix}$
  2. $X^T X$ 계산: $\begin{bmatrix} 1 & 1 \\ 1 & 2 \end{bmatrix}^T \begin{bmatrix} 1 & 1 \\ 1 & 2 \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 2 \end{bmatrix} \begin{bmatrix} 1 & 1 \\ 1 & 2 \end{bmatrix} = \begin{bmatrix} 2 & 3 \\ 3 & 5 \end{bmatrix}$
  3. 역행렬 $(X^T X)^{-1}$ 계산: $\frac{1}{(2\cdot5 - 3\cdot3)} \begin{bmatrix} 5 & -3 \\ -3 & 2 \end{bmatrix} = \begin{bmatrix} -5 & 3 \\ 3 & -2 \end{bmatrix}$
  4. $X^T y$ 계산: $\begin{bmatrix} 1 & 1 \\ 1 & 2 \end{bmatrix}^T \begin{bmatrix} 3 \\ 5 \end{bmatrix} = \begin{bmatrix} 1 & 1 \\ 1 & 2 \end{bmatrix} \begin{bmatrix} 3 \\ 5 \end{bmatrix} = \begin{bmatrix} 8 \\ 13 \end{bmatrix}$
  5. 최종 $\hat{\beta}$: $\hat{\beta} = \begin{bmatrix} -5 & 3 \\ 3 & -2 \end{bmatrix} \begin{bmatrix} 8 \\ 13 \end{bmatrix} = \begin{bmatrix} (-5 \cdot 8) + (3 \cdot 13) \\ (3 \cdot 8) + (-2 \cdot 13) \end{bmatrix} = \begin{bmatrix} -40 + 39 \\ 24 - 26 \end{bmatrix} = \begin{bmatrix} -1 \\ -2 \end{bmatrix}$ (※ 예시 수치에 따라 결과는 달라질 수 있음)
  6. 결과: $\hat{y} = -1 - 2x$

6. 희소 행렬 (Sparse Matrix)

데이터셋의 규모가 커지고 원-핫 인코딩 등을 적용하면 설계행렬의 대부분의 원소가 0이 되는 희소 행렬(Sparse Matrix) 형태가 된다.

  • 문제점: 모든 0을 메모리에 저장할 경우 메모리 낭비가 심하며 연산 속도가 저하된다.
  • 해결책: 0이 아닌 값의 위치와 값만 저장하는 CSR(Compressed Sparse Row) 또는 CSC(Compressed Sparse Column) 형식을 사용하여 메모리 효율성을 높인다.

7. 주요 고려사항 및 제약

7.1. 다중공선성과 풀 랭크 (Full Rank)

설계행렬 $X$의 열들 사이에 강한 선형 상관관계가 있을 때 다중공선성(Multicollinearity) 문제가 발생한다. 수학적으로는 $X$가 풀 랭크(Full Rank)가 아니게 되어 $X^T X$의 행렬식(Determinant)이 0이 된다. 행렬식이 0이면 역행렬이 존재하지 않으므로, 정규 방정식 $\hat{\beta} = (X^T X)^{-1} X^T y$를 통해 유일한 해를 구할 수 없게 된다.

7.2. 정규화 (Scaling)의 필요성

특성 간의 단위(Scale) 차이가 매우 클 경우(예: 나이 20~80 vs 소득 2,000,000~10,000,000), 설계행렬의 조건수(Condition Number)가 커져 수치적 불안정성이 발생한다. - 표준화(Standardization): 평균을 0, 표준편차를 1로 변환. - 정규화(Normalization): 값을 0과 1 사이로 변환. 정규화를 통해 경사하강법(Gradient Descent)의 수렴 속도를 높이고, 특정 특성이 모델에 과도한 영향을 주는 것을 방지할 수 있다.

분류: 과학 / 통계학 / 데이터 구조

AI 생성 콘텐츠 안내

이 문서는 AI 모델(gemma-4-31b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?