데이터 사이언스에서의 미분: 기본 개념, 공식 및 경사하강법 이해

TABLE OF CONTENTS

1. 서론

데이터 사이언스는 복잡한 데이터 세계를 이해하고 예측하는 데 필수적인 도구이다. 이 분야에서 성공적으로 활동하기 위해서는 다양한 수학적 개념과 기술을 이해하고 적용할 수 있는 능력이 필요하다. 그 중에서도 미분은 데이터 사이언스의 핵심적인 부분을 차지하며, 모델링 및 알고리즘 최적화에 있어서 중요한 역할을 한다. 이 글에서는 미분이라는 기본적인 수학 도구가 어떻게 데이터 분석과 머신러닝 알고리즘에 적용되는지 탐구한다. 미분의 기본 원리부터 시작하여, 편미분, 체인 규칙, 경사하강법 등 데이터 사이언스의 여러 측면에서 미분이 어떻게 활용되는지 살펴볼 것이다.

2. 미분

미분을 이해하기 위해서는 먼저 기본적인 개념과 왜 중요한지를 알 필요가 있다. 미분은 기본적으로 변화의 측정이다. 생각해 보자. 우리 주변의 많은 것들이 변화하고 있다: 차의 속도, 기온, 주식 가격 등. 이러한 변화를 수학적으로 이해하고 예측하는 데 미분이 필요하다.

2.1 미분의 기본 개념

미분의 기본 개념

  1. 변화율 측정: 미분은 어떤 것이 '얼마나 빠르게' 변하는지를 측정한다. 예를 들어, 차가 가속할 때 그 속도가 얼마나 빨리 증가하는지 (즉, 가속도)를 계산하는 것이 미분이다.
  2. 함수의 순간적 변화: 함수에서 어떤 한 점의 순간적인 변화율을 찾는 것이다. 예를 들어, 곡선의 특정 지점에서의 기울기를 찾는 것이다.
  3. 극한의 개념 사용: $\Delta x$ ($x$의 작은 변화)를 0에 가깝게 하여 순간적인 변화를 측정한다. 이는 곡선에서 한 점의 기울기를 나타낸다.

2.2 미분의 중요성

  1. 자연 현상 이해: 물리학, 화학, 생물학 등 많은 자연 과학 분야에서 변화를 수학적으로 설명하는 데 미분이 사용된다.
  2. 공학 및 기술 응용: 공학적 설계, 전자기학, 유체역학 등에서 미분은 필수적인 도구다.
  3. 경제 및 금융에서의 응용: 비용, 수익, 소비 경향과 같은 경제적 요소의 변화율을 이해하는 데 미분이 사용된다.
  4. 컴퓨터 과학 및 데이터 과학: 머신러닝 알고리즘에서 최적화 문제를 해결하거나 데이터의 추세를 분석하는 데 미분이 중요하다.

2.3 미분 예시

  • 속도와 가속도: 물체가 움직이는 속도를 시간에 대해 미분하면 가속도가 된다.
  • 경사하강법: 데이터 과학에서, 머신러닝 모델의 오차를 최소화하기 위해 경사하강법이라는 최적화 방법을 사용한다. 이 방법은 미분을 기반으로 하여 가장 낮은 오차를 찾는다.

2.3.1 미분의 일상적 예: 자동차의 속도

당신이 자동차를 운전하고 있다. 다음과 같은 상황을 생각해 보자:

  • 속도 측정: 자동차의 속도계가 현재 속도를 km/h(킬로미터/시간) 단위로 보여준다. 이 속도는 '거리 대 시간'의 비율로, 여기서 '거리'는 자동차가 이동한 거리이고, '시간'은 이동하는 데 걸린 시간이다.
  • 가속: 속도계의 수치가 증가한다면, 당신의 자동차는 가속하고 있는 것이다. 이것은 '속도의 변화율'이다. 예를 들어, 매 초마다 속도계가 10km/h씩 증가한다면, 이것은 '가속도'를 나타낸다.

2.3.1.1 미분과 자동차 예

이제 자동차의 속도와 가속을 미분의 관점에서 생각해보자:

  • 속도 = 미분: 자동차의 속도계가 보여주는 것은 사실 '위치(거리)'의 미분이다. 즉, 자동차가 얼마나 빨리 위치를 변경하고 있는지를 나타내는 것이다.
  • 가속 = 속도의 미분: 가속도는 속도의 변화율을 나타낸다. 즉, 속도가 얼마나 빨리 변하는지를 측정하는 것이다. 이것은 속도(위치의 미분)의 미분이다.

2.3.1.2 미분의 핵심

  • 변화율 측정: 미분은 어떤 양이 어떻게 변하는지 측정한다. 예를 들어, 자동차가 얼마나 빨리 가속하고 있는지(속도의 변화율), 또는 산책하면서 경사가 얼마나 가파른지(높이의 변화율) 등을 측정할 수 있다.
  • 순간적인 변화: 미분은 순간적인 변화를 측정한다. 예를 들어, '이 순간 자동차의 가속도는 얼마인가?'와 같은 질문에 답할 수 있다.

3. 미분과 데이터 사이언스

3.1 선형 회귀 모델과 미분

선형 회귀는 데이터 사이언스에서 매우 중요한 개념이다. 이 모델은 간단하게 말해 한 변수의 변화가 다른 변수에 어떤 영향을 미치는지를 수학적으로 나타내는 방법이다. 먼저 랜덤 데이터 분포를 생성한다:

python
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

# 랜덤하게 평균 0, 표준편차 1의 가우시안 표준 정규 분포 난수 x, y를 50개씩 추출
np.random.seed(42)
x = np.random.randn(50)
y = np.random.randn(50)

# 산점도를 통해 x, y를 시각화
sns.regplot(x, y)
plt.show()

산점도를 통해 x, y를 시각화

$x$를 넣었을 때, $y$ 값을 예측하는 선형 모델은 아래와 같이 나타낼 수 있다:

$$ \hat y = a + b X $$

여기서:

  • $\hat y$는 예측된 결과값이다.
  • $X$는 입력 변수(독립 변수)이다.
  • $a$는 y-절편(y-intercept)이며, 그래프가 $y$축을 어디에서 자르는지를 나타낸다.
  • $b$는 기울기(slope)로, $X$의 한 단위 변화가 $Y$에 어떤 영향을 미치는지 나타낸다.

주어진 데이터 $X$를 넣었을 때 모델이 예측하는 예측값과 실제값 간의 차이(Error, $\varepsilon$)를 계산한 다음, 여러 모델 중 Error(모델에서 예측하는 예측값과 실제값($y$)의 차이)가 가장 작은 모델을 선택하는 방법을 통해, 가장 좋은 모델을 선택 할 수 있다.

이 과정은 $f(a,b) = \varepsilon$ 로 표현하며, 오차 함수인 $\varepsilon$을 최소화 하는 $a,b$를 찾는 것이 머신러닝(Linear regression)의 목표이다.

3.1.1 오차 함수와 MSE

이 모델의 핵심은 실제 값과 모델이 예측한 값 사이의 오차를 최소화하는 것이다. 오차는 보통 Mean Squared Error(MSE)로 측정한다. MSE는 실제 값과 예측 값 간의 차이의 제곱의 평균입니다:

$$ MSE = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 $$

여기서 $y_i$는 실제 값이고, $\hat y_i$는 모델에 의해 예측된 값입니다.

3.1.2 미분을 통한 최적화 과정

선형 회귀 모델에서 최적의 $a$와 $b$를 찾기 위해 미분을 사용한다. 미분을 통해 MSE의 최소값을 갖는 지점을 찾는 것이 목표다. 간단히 말해, $a$와 $b$에 대한 MSE의 도함수를 구하고, 이 도함수($f'(x)$)가 0이 되는 지점(즉, 변화율이 0인 부분)을 찾는 것이다. 이 지점이 오차를 최소화하는 가장 좋은 $a$와 $b$의 값이 된다.

3.2 미분 공식(with. Python)

3.2.1 기본 미분 공식

미분을 계산하는 기본적인 방법은 함수의 값이 얼마나 변하는지를 살펴보는 것이다. 이를 위해 다음과 같은 두 가지 방법을 사용할 수 있다:

3.2.1.1 전진 차분법

함수의 값에서 아주 작은 값을 더한 후 원래 함수의 값과의 차이를 계산한다. 이를 수식으로 표현하면 다음과 같다:

$$f'(x) = {f(x + \Delta x) - f(x) \over \Delta x}, \Delta x \rightarrow 0$$

여기서 $\Delta x$는 매우 작은 값이다. 이 값은 실제로 0이 될 수는 없지만, 매우 작게 하여 0에 가깝게 한다. 보통 $1e-5$를 사용하며, 이러한 접근 방식을 numerical method라는 방법으로 표현한다.

3.2.1.2 중앙 차분법

함수의 값에서 아주 작은 값을 더하고 빼서, 그 차이를 2배의 $\Delta x$로 나눕니다. 이 방법은 전진 차분법보다 정확한 결과를 줄 수 있다:

$$f(x + \Delta x) - f(x - \Delta x) \over 2\Delta x$$

3.2.2 머신러닝에서의 미분 공식

3.2.2.1 상수 함수의 미분

$$ f(x) = 상수 \rightarrow f'(x) = 0 $$

상수 함수는 입력 값에 상관없이 항상 같은 값을 반환하는 함수이다. 예를 들어, $f(x) = 5$는 어떤 $x$ 값을 넣어도 항상 5를 반환한다. 이런 함수는 변화하지 않으므로, 변화율(미분)은 0이다. 이것은 머신러닝에서 특정 변수가 결과에 영향을 미치지 않음을 나타낼 때 중요하다.

파이썬 예시:

python
# 예시 1 : Numerical Method

# f(x) = 5
def f(x):
    return 5

def numerical_derivative(fx, x):
    delta_x = 1e-5

    return (fx(x + delta_x) - fx(x)) / delta_x

print(numerical_derivative(f, 1)) # 0.0

# 예시 2 : Scipy의 derivative 활용
from scipy.misc import derivative

# 두 방법의 결과값 비교
print(derivative(f,1, dx=1e-6) == numerical_derivative(f, 1)) # True

여기서 numerical_derivative 함수는 함수 f(x)의 미분을 계산한다. $\Delta x$(delta_x)는 아주 작은 값을 나타내며, 이 작은 변화에 따른 함수 값의 변화율을 계산한다.

3.2.2.2 거듭제곱 함수의 미분 (Power Rule)

$$ Power Rule : f(x) = ax^{n} \rightarrow f'(x) = an{x}^{(n-1)} $$

Power Rule은 미분을 통해 거듭제곱 함수의 변화율을 계산하는 간단한 방법을 제공한다. 거듭제곱 함수는 $x$의 거듭제곱 형태의 함수이다. 예를 들어 $f(x) = x^2$는 거듭제곱 함수이다. 이 함수의 미분은 거듭제곱의 차수를 줄이고, 그 차수만큼 계수를 곱하는 방식으로 계산된다. 예를 들어, $f(x) = 3x^4$라면, 미분 결과는 $f'(x) = 12x^3$이 된다. 이 함수의 미분은 함수의 기울기나 변화율을 파악하는 데 중요하다. 머신러닝에서 변수의 영향력을 이해하는 데 사용된다.

파이썬 예시:

python
# 같은 결과를 numerical method를 활용해서 계산
def f(x):
    return 3*(x**4) + 10

def numerical_derivative(fx, x):
    delta_x = 1e-5

    return (fx(x + delta_x) - fx(x)) / delta_x

print(numerical_derivative(f, 2)) # 96.0007200028201

# 예시 2 : Scipy의 derivative 활용
from scipy.misc import derivative

# 두 방법의 결과값 비교
print(derivative(f,2, dx=1e-5)) # 96.0000000031158
print(derivative(f,2, dx=1e-5) == numerical_derivative(f, 2))  #False

delta_x의 값은 같지만 Rounding 에러로 인해 두 결과가 미묘하게 다른 것을 확인할 수 있다. 여기서 $3x^4 + 10$의 미분은 $12x^3$이 된다. 상수 10은 변화하지 않으므로 미분하면 0이 된다.

3.2.2.3 지수 함수의 미분

$$ f(x) = e^x \rightarrow f'(x) = e^x$$

지수 함수는 $e^x$와 같은 형태의 함수이다. 지수 함수 $e^x$는 매우 중요한 수학적 속성을 가지고 있으며, 자연 과학, 엔지니어링, 경제학 등 여러 분야에서 널리 사용된다. 이 함수의 특징은 미분해도 원래 함수의 형태를 유지한다는 것이다. 즉, $f(x) = e^x$라면, 미분 결과도 $f'(x) = e^x$가 된다. 지수 함수의 미분이 자기 자신이 되는 이 특징은, 복리 계산이나 성장률 추정 등에서 매우 유용하다. 머신러닝에서는 지수 함수가 포함된 모델(예: 지수적 성장을 나타내는 모델)의 최적화에 사용된다.

3.2.2.3.1 지수 함수란?

지수 함수는 $e^x$와 같이 표현되며, 여기서 $e$는 자연 상수(약 2.718)이다. $x$는 지수(거듭제곱을 나타내는 수)입니다. 지수 함수의 특징은 다음과 같다:

  • 빠른 증가: 지수 함수는 $x$ 값이 증가함에 따라 매우 빠르게 증가한다. 예를 들어, $e^2$는 약 7.39, $e^4$는 약 54.6이다.
  • 미분의 특징: 지수 함수를 미분하면 원래의 함수와 같은 형태가 된다. 즉, $e^x$를 미분하면 결과도 $e^x$이다.

지수 함수는 복리 이자 계산, 인구 성장 모델, 방사성 붕괴 등 다양한 자연 현상과 금융 모델에서 사용된다. 또한, 머신러닝에서 지수적 성장이나 감소를 모델링할 때도 중요하다.

3.2.2.4 로그 함수의 미분

$$ f(x) = ln(x) \rightarrow f'(x) = {1 \over x} $$

로그 함수, 특히 자연 로그 함수는 $\ln(x)$는 복잡한 곱셈을 단순한 덧셈으로 변환하는 등의 유용한 속성을 가지고 있다. 이 함수의 미분은 ${1 \over x}$가 된다. 즉, $f(x) = \ln(x)$라면, 미분 결과는 $f'(x) = {1 \over x}$이다. 이는 로그 스케일에서의 변화율을 나타낸다. 머신러닝에서는 로그 손실 함수나 엔트로피 계산 등에서 이러한 미분이 필요하다.

3.2.2.4.1 로그 함수란?

로그 함수, 특히 자연 로그 $\ln(x)$는 지수 함수의 '역함수'이다. 역함수란 원래 함수의 작용을 거꾸로 되돌리는 함수이다. 자연 로그 함수의 특징은 다음과 같다:

  • 역산을 수행: 로그 함수는 지수 함수의 결과를 원래의 수로 되돌리는 역할을 한다. 예를 들어, $e^2 \approx 7.39$이므로, $\ln(7.39) \approx 2$입니다.
  • 미분의 특징: 로그 함수 $\ln(x)$의 미분은 $\frac{1}{x}$이다. 이는 $x$가 증가함에 따라 로그 함수가 얼마나 변하는지 나타낸다.

로그 함수는 복잡한 곱셈 문제를 단순한 덧셈으로 바꿔주어 계산을 용이하게 한다. 머신러닝에서는 데이터의 스케일을 조정하거나, 로그 손실 같은 손실 함수를 계산하는 데 사용된다.

4. 편미분과 그 중요성

4.1 편미분이란?

편미분은 여러 변수를 가진 함수에서 한 변수에 대해서만 미분을 하는 것이다. 다른 모든 변수들은 그냥 상수처럼 취급한다. 이것은 머신러닝에서 특히 중요한데, 여러 파라미터를 가진 모델에서 각 파라미터가 오류에 어떤 영향을 미치는지 이해하기 위해 필요하다.

4.2 편미분의 예시

함수 $f(x, y) = x^2 + 4xy + 9y^2$를 예로 들어보겠다. 이 함수는 두 변수 $x$와 $y$를 가지고 있다. 이제 이 함수에 대해 편미분을 할 것이다.

4.2.1 $x$에 대한 편미분

  • 편미분 과정:
    • $x$에 대한 편미분을 할 때, $y$는 상수로 취급한다.
    • $f(x, y)$를 $x$에 대해 미분하면, $2x + 4y$가 된다. 여기서 $x^2$는 $2x$로 미분되고, $4xy$는 $4y$로 미분된다 (상수 $y$는 그대로 남음).
  • 특정 점에서의 편미분:
    • $x=1$ 및 $y=2$일 때, 편미분 값은 $2 \cdot 1 + 4 \cdot 2 = 10$이 된다.

4.2.2 $y$에 대한 편미분

  • 편미분 과정:
    • 이번에는 $y$에 대해 편미분을 한다. 여기서는 $x$를 상수로 취급한다.
    • $f(x, y)$를 $y$에 대해 미분하면, $4x + 18y$가 된다. 여기서 $4xy$는 $4x$로 미분되고, $9y^2$는 $18y$로 미분된다.
  • 특정 점에서의 편미분:
    • $x=1$ 및 $y=2$일 때, 편미분 값은 $4 \cdot 1 + 18 \cdot 2 = 40$이 된다.

4.3 편미분의 중요성

  • 머신러닝의 적용: 편미분은 머신러닝 모델에서 각 파라미터가 오차에 미치는 영향을 파악하는 데 중요하다. 예를 들어, 선형 회귀 모델에서 각 계수의 중요성을 평가하거나, 신경망에서 가중치를 업데이트하는 데 사용된다.
  • 모델 최적화: 오차 함수를 최소화하는 모델 파라미터를 찾기 위해 경사 하강법과 같은 최적화 기법에서 편미분이 사용된다.

5. 체인룰(Chain Rule): 합성함수의 미분

5.1 체인룰(Chain Rule)이란?

체인룰은 합성함수의 미분을 계산할 때 사용되는 규칙이다. 합성함수란, 하나의 함수가 다른 함수에 적용된 형태의 함수를 말한다. 간단히 말해, 체인룰은 '함수의 함수'를 미분하는 방법이다.

5.2 체인룰의 공식

체인룰은 다음과 같은 공식으로 표현된다:

  • 주어진 함수가 $F(x) = f(g(x))$ 형태라고 가정할 때,
  • $F(x)$를 미분한 결과 $F'(x)$는 $f'(g(x)) \cdot g'(x)$가 된다.

여기서 $f'(g(x))$는 외부 함수 $f$를 미분한 것이고, $g'(x)$는 내부 함수 $g$를 미분한 것이다.

5.3 예제: 합성함수 미분

합성함수 $F(x) = (2x^3 + 7)^6$를 미분하는 예제를 통해 체인룰을 적용해 볼 것이다.

  1. 함수 설정:
    • 외부 함수를 $f(u) = u^6$라고 하면, 여기서 $u = g(x)$이다.
    • 내부 함수를 $g(x) = 2x^3 + 7$이라고 한다.
  2. 각 함수 미분:
    • 외부 함수 $f(u)$의 미분은 $f'(u) = 6u^5$이다.
    • 내부 함수 $g(x)$의 미분은 $g'(x) = 6x^2$이다.
  3. 체인룰 적용:
    • $F'(x)$는 $f'(g(x)) \cdot g'(x)$에 해당한다.
    • 즉, $F'(x) = 6(2x^3 + 7)^5 \cdot 6x^2$가 된다.

5.4 체인룰의 중요성

체인룰은 복잡한 합성함수를 미분할 때 필수적이다. 머신러닝에서 활성화 함수나 손실 함수와 같은 복잡한 함수들의 미분을 계산할 때 매우 유용하며, 이를 통해 모델의 최적화를 도와준다. 체인룰을 이해하는 것은 머신러닝 알고리즘의 작동 원리를 깊이 이해하는 데 중요한 부분이다.

6. 경사하강법: 미분의 실제 적용 예시

6.1 경사하강법(Gradient Descent)이란?

경사하강법은 머신러닝에서 오차 함수(또는 비용 함수)를 최소화하는 파라미터를 찾는데 사용되는 최적화 알고리즘이다. 이 방법은 함수의 최소값을 찾기 위해 함수의 기울기(그래디언트)를 따라 점차적으로 내려가는 방식으로 작동한다. 쉽게 말하면 산을 내려오는 것과 비슷하다. 산의 꼭대기(또는 어떤 시작점)에서 시작하여 가장 낮은 지점(최소 오차)을 찾으려고 할 때, 가장 가파른 경사를 따라 내려가는 방식으로 생각할 수 있다.

6.2 오차 함수 최소화

  • 오차 함수 (Error Function): 오차 함수 $\epsilon$는 실제 값과 모델의 예측 값 사이의 차이를 나타낸다. 목표는 이 오차를 최소화하는 파라미터 $a$와 $b$를 찾는 것이다.
  • 최적의 파라미터 찾기: 오차 함수의 그래디언트(미분계수)가 0인 지점을 찾아 그 지점의 파라미터 값을 결정한다. 이 지점은 함수의 최소값(또는 극소값)을 나타낸다.

6.3 경사하강법의 작동 원리

  • 임의의 시작점 선택: 처음에는 임의의 파라미터 값을 선택한다 (random initialization).
  • 기울기 계산: 현재 파라미터에서 오차 함수의 기울기(그래디언트)를 계산한다. 이 기울기는 오차가 가장 크게 증가하는 방향을 나타낸다.
  • 반대 방향으로 이동: 오차를 줄이기 위해, 기울기의 반대 방향으로 파라미터를 조정한다. 이 때 사용하는 값이 학습률($\eta$)이다.
  • 파라미터 업데이트: 파라미터 $a$와 $b$는 다음과 같이 업데이트 된다:
    • $a_{n+1} = a_n - \eta \nabla f(a_n)$
    • $b_{n+1} = b_n - \eta \nabla f(b_n)$
  • 반복 과정: 이 과정을 반복하여 오차 함수의 그래디언트가 0에 가까워질 때까지 파라미터를 조정한다.

6.4 학습률의 중요성

  • 학습률 결정: 학습률은 파라미터가 업데이트되는 속도를 결정한다. 너무 낮으면 알고리즘이 최소값에 도달하는 데 오래 걸린다. 반면, 너무 높으면 최소값을 넘어서서 알고리즘이 수렴하지 못하고 계속해서 계산을 반복할 수 있다.
  • 적절한 학습률 선택: 학습률은 신중하게 선택되어야 한다. 너무 높거나 낮은 학습률은 알고리즘의 효율성과 정확도에 부정적인 영향을 미칠 수 있다.

6.5 파이썬 코드 예시

python
def gradient_descent(X, y, lr = 0.05, epoch = 10):

    a, b = 0.33, 0.48 # 임의 선택한 파라미터 a, b
    N = len(X) # 샘플 갯수

    for _ in range(epoch):            
        f = y - (a*X + b)

        # a와 b를 업데이트
        a -= lr * (-2 * X.dot(f).sum() / N)
        b -= lr * (-2 * f.sum() / N)        

    print('a: '+str(a))
    print('b: '+str(b))


# y = 3x + 5
X = np.array([1, 2, 3, 4, 5])
y = np.array([8, 11, 14, 17, 20])

gradient_descent(X, y)  # 10번만 돌렸을 때
"""
a: 3.820070615328
b: 2.0392842721280005
"""

gradient_descent(X, y, epoch=1000)  # 1000번 반복
"""
a: 3.000000038323629
b: 4.999999861639539
"""

이 코드는 간단한 선형 회귀 모델에 대해 경사하강법을 적용한 예시이다. 목표는 $y = 3x + 5$에 가까운 최적의 $a$와 $b$ 값을 찾는 것이다. 코드에서는 여러 번 반복하면서 $a$와 $b$를 조정해 나가며, 이 값들이 점차 실제 값에 가까워지는 것을 볼 수 있다.

7. 마무리 및 참고

이 아티클을 통해 우리는 미분이 데이터 사이언스에서 어떻게 사용되는지에 대한 광범위한 이해를 얻었다. 미분은 단순한 수학적 도구를 넘어서서, 변화를 이해하고 예측하는 데 있어 핵심적인 역할을 한다. 특히, 데이터 사이언스에서는 모델의 효율성과 정확성을 극대화하는 데 필수적인 요소이다. 선형 회귀, 경사하강법과 같은 기법들은 미분을 기반으로 하여 복잡한 데이터 패턴을 해석하고, 최적의 해결책을 찾는 데 있어 중요한 역할을 한다. 이러한 이해는 머신러닝 알고리즘과 데이터 분석 기법을 더욱 깊이 있게 이해하고 효과적으로 적용하는 데 도움이 될 것이다. 결론적으로, 미분은 데이터 사이언스의 세계를 탐험하는 데 있어 필수적인 나침반이며, 이 분야에서 성공하고자 하는 모든 이들에게 귀중한 자산이 될 것이다.

관련 아티클