학습주제
- 회귀분석과 데이터모델링)
주요학습내용
- 데이터 모델링이란?
- 주어진 데이터에서 사용하고자 하는 x, 알고싶은 값 y 가 있을 때 y = f(x) 라는 함수를 통해서 x와 y의 관계를
설명할 수 있다면?
x 를 독립변수, y를 종속변수 라고 합니다(x 를 feature, y를 label) - y와 x의 관계를 효과적으로 설명하는 f()함수를 만드는 일 = 모델링
- y값이 존재하는 경우 supervised learning
y값이 존재하지 않는 경우 unsupervised learning
y값이 continuous(연속형)값 = regression task
y값이 categorical 값 = classification task
- 주어진 데이터에서 사용하고자 하는 x, 알고싶은 값 y 가 있을 때 y = f(x) 라는 함수를 통해서 x와 y의 관계를
- 데이터 모델링 - Bayes theorem의 관점
- 조건부 확률 : 어떤 사건이 일어났다는 '전제 하에' 다른 사건이 일어날 확률
두 사건 A, B가 있을 때, 사건 A 가 일어났을 때 B가 일어날 확률
P(B|A) = P(A ∩ B) / P(A) - 이 때 P(A|B) = P(A ∩ B) / P(B)이므로 P(B|A) = P(A|B)P(B) / P(A) 로 표현이 가능
- 데이터 모델링의 관점에서 P(θ|X) = P(X|θ)P(θ) / P(X) 로 표현이 가능
X: 관측된 데이터
θ: 데이터에 대한 가설, 즉 모델의 parameter값 - - P(X): Marginal probability, 데이터 X 자체의 분포
- P(θ): Prior probability, 데이터 관측 이전의(사전) Parameter의 확률 분포
(보통은 모든 값에 대한 확률이 동일하다고 가정)
- P(X|θ): Likelihood, Parameter가 주어졌을 때 X 데이터가 관측될 확률 분포
- P(θ|X): Posterior probability, Observation (dataset X)가 ‘주어졌을 때’ parameter의 확률분포 - 궁극적으로 목적은 P(θ|X)를 최대화 하는 θ를 찾는 것
- P(θ)가 일정하다는 가정 하에서는 P(X|θ), Likelihood를 최대화 하는 θ를 추정(MLE)
그렇지 않을 때는 P(X|θ)P(θ)를 최대화 하는 θ를 추정(MAP)하는 과정이 데이터 모델링이라고 할 수 있습니다.
- 조건부 확률 : 어떤 사건이 일어났다는 '전제 하에' 다른 사건이 일어날 확률
- 데이터 모델링 과정
- 데이터를 전처리 및 분석합니다.
- 데이터를 training set, test set으로 나눕니다.
- training set에 대해서 사용할 모뎅을 학습시킵니다(model.fit(training_set))
- test set에 대해서 학습된 모델의 예측값을 통해 모델의 성능을 평가합니다.
(실제값과 예측값의 비교를 통해서) - (모델의 성능이 충분히 쓸만하다 판단되면)
새로운 데이터에 대해 학습된 모델을 이용해 y값을 예측합니다.
- 데이터 모델링 - Linear Regression
- x 와 y 간의 '선형'관계(y = b + wx)가 있다고 가정할 때 주로 사용
- b + wx = y(예측) 라는 값에 대해서 y(예측) 값이 실제 y와 최대한 가까워지는 w(weight), b(bias)값을 찾도록 학습
- Linear regression 오차항 ε의 가정 5가지
- 오차항의 기대치는 0이다.
- 오차항은 일정한 분산을 가진다.
- i != j 일때 εi 와 εj 는 서로 독립적이다.
- 독립변수 X와 εi 는 서로 독립이다.
- εi는 정규분포 N(0, σ^2)를 따른다
- 가정 5가지로 파생되는 가정
- 회귀모형은 선형성을 가진다.
- 종속변수 Y의 분산은 일정한 값 σ^2를 가진다.
- εi 와 εj 는 서로 독립이며, εi는 자기상관성이 없다.
- 시계열 데이터의 경우 자기상관성이 존재할 수 있다. - Y는 정규분포를 따른다.
- 비용함수 (Cost function)
- 실제 Y와 Y(예측)의 오차를 계산하는 식을 세우고, 이 오차를 최소화하는 w, b를 찾아야 한다.
- 실제값과 예측값의 오차에 대한 식을 손실함수 (loss function), 비용함수 (cost function), 혹은
목적함수(objective function)라고 합니다. - 선형회귀에서는 기본적으로 Residual sum of squares(RSS), 혹은 Mean squared error(MSE)를
cost function으로 사용합니다 - Cost function이 differentiable(미분가능)하고 convex(아래로 볼록)할 때, cost의 최저점은 cost function을
w, b로 각각 편미분 했을 때 0이 되는 지점입니다.
- 데이터 모델링 - Ordinary Least Squares (OLS, 최소제곱법)
- 오차 ε를 최소화하는 w, b를 추정하는 방법
- ε의 제곱의 합이 최소가 되는 점을 찾기 위해서
ε의 제곱의 합을 w, b로 표현한 뒤
w, b로 각각 편미분 했을 때 0이 되면서
2차 편미분(Jacobian) 값이 Positive definite 이 되도록 해야한다.
- 데이터 모델링 - Gradient descent (경사 하강법)
- parameter에 대해 cost function을 편미분한 값을 learning rate α 여러번 update 해주는 것
- 변수가 많아지거나 cost function이 복잡해지는 경우, 최소 제곱법을 통해서 한번에 loss가 최소인
parameter를 추정하기 어렵습니다, - 보통 데이터가 매우 많을 때 사용
- 한번에 gradient descent step을 계산하는 batch gradient descent 보다는
매 스텝에서 mini-batch 만큼의 데이터를 샘플링 해서 학습하는 mini-batch stochastic gradient descent(SGD)
방식으로 학습합니다
- 데이터 모델링 - Overfitting ( 학습 데이터에 대해서 과하게 fitting되는 경우를 의미)
- Generalization(일반화): 학습할 때와 추론할 때의 성능 차이가 많이 나지 않는 경우.
즉, 모델이 여러 inference 상황에서 잘 쓰일 수 있음을 의미 - Overfitting이 발생하는 경우, test set에서의 loss가 증가할 수 있기 때문에 실제 inference 상황에서
모델이 generalization(일반화)되기 어렵게 됩니다 - 보통 데이터에 내재된 복잡도 (complexity)보다 모델의 복잡도가 더 과한 경우나, 데이터셋 사이즈가
작은 경우 자주 발생 - Linear regression의 경우, 고려하는 변수가 많아질수록 overfitting이 발생할 가능성이 높다.
- Generalization(일반화): 학습할 때와 추론할 때의 성능 차이가 많이 나지 않는 경우.
- Overfitting을 줄이는 방법 : regularization(정규화)
- Overfitting을 해결하는 방법은 크게 두 가지
- 모델의 복잡도 줄이기: 모델이 가질 수 있는 parameter를 줄이거나 (e.g. 딥러닝에서 모델의 사이즈)
모델이 고려하는 feature 중에서 상대적으로 중요한 feature 들만 모델의 input으로 사용 - 정규화(Regularization): 모델이 가지는 복잡도를 제한하는 방법으로 보통 모델의 parameter가
가지는 값의 크기를 cost function에 추가해주는 방식으로 parameter 값의 크기를 제한
- 모델의 복잡도 줄이기: 모델이 가질 수 있는 parameter를 줄이거나 (e.g. 딥러닝에서 모델의 사이즈)
- Overfitting을 해결하는 방법은 크게 두 가지
- 데이터 모델링 - Ridge
- Ridge regression: 선형 회귀 모델에 L2 loss를 추가해서 parameter를 정규화
- Ridge regression모델의 패널티항은 모델의 weight parameter들의 제곱합이며,
lambda hyperparameter를 이용해서 모델에 주어지는 패널티를 조절 - Parameter가 갖는 원형의 제약 조건 내에서 cost의 최적점에 가장 가까운 w*를 사용
- 데이터 모델링 - Lasso
- Lasso regression: 선형 회귀 모델에 L1 loss를 추가해서 parameter를 정규화
- Lasso regression모델의 패널티항은 모델의 weight parameter들의 절대값의 합
- Parameter가 갖는 사각형의 제약 조건 내에서 cost의 최적점에 가장 가까운 w*를 사용하며,
유의미하지 않은 변수들에 대한 계수를 0으로 주어 중요한 변수를 선택할 때 유용하게 사용 가능
- 데이터 모델링 - Logistic regression
- Linear regression의 output y 값에 ‘Sigmoid function’을 적용해서 output y의 값이 0~1 사이 값이 되도록 만든다.
- Classification에 적합화된 Linear regression model
- 데이터 모델링 - Support Vecter Machine(SVM)
- Linear regression과 비슷하지만, “어느 정도의 허용오차(C) 안에 있는 오차값은 허용해준다”
- 허용 오차 C 값을 잘 설정해야 모델이 좋은 성능을 낼 수 있다.
- kernel= 설정을 통해 모델이 가정하는 x와 y의 관계(선형, 2차 선형, …) 등을 잘 잡아낼 수 있다.
- 데이터 모델링 - Random Forest
- Decision Tree는 x를 기준삼아, “해당 기준을 만족/불만족시 y값이 ~값일것이다”
라는 조건(x)-결과(y) 를 나무처럼 발전 - Classification에서는 y값이 클래스, Regression에서는 y값이 평균값
- RandomForest는 Decision Tree를 무작위로 여러개 만든 후, 각 tree마다 나온 decision들을
voting(ensemble)을 통해서 최종적인 y 값을 예측 - n_estimators(트리의 개수), max_depth(각 트리의 길이) 등을 설정하여 모델의 성능을 높일 수 있다.
다만, 무조건 트리 개수나 길이값이 크다고 성능이 좋아지진 않으며, 학습 시간이나 차지하는 메모리가
지나치게 커질 수 있습니다
- Decision Tree는 x를 기준삼아, “해당 기준을 만족/불만족시 y값이 ~값일것이다”
- 데이터 모델링 - regression 평가 방법(evaluation)
- 모델을 제대로 평가하는 metric(지표)을 사용해 주어진 데이터에 가장 효과적인 모델을 사용할 수 있다
- Mean Squared Error(MSE)
- 오차(틀린값)의 제곱을 평균으로 나눈 값, 0에 가까울수록 좋은 성능이라고 볼 수 있고,
오차값이 큰 데이터점에 대해서 민감하게 반응합니다 (Outlier에 민감하게 반응) - Mean Absolute Error(MAE)
- 오차의 절대값을 평균으로 나눈 값
- 0에 가까울수록 좋은 성능이라고 볼 수 있다. 오차값이 큰 데이터에대해서 상대적으로 덜 민감하게 반응 - R-square(결정계수)
- 독립변수 x 가 종속변수 y를 얼마나 잘 설명하는 지를 나타냅니다.
- 전체 y의 평균으로부터각 y값이 멀리 떨어질수록, 예측한 y값과 실제 y값이 가까울수록 1에 가까워진다.
- 0~1 사이 값을 가지며, 1에 가까울수록 좋은 성능 - F1 score
- Precision과 recall을 둘다 고려한 metric
- 데이터 모델링 - Principal component analysis (PCA)
- PCA는 고차원의(feature가 많은) x에 대해서 주어진 x 들의 분포를 가장 잘 설명하는 x축, y축을 찾아내는 기술
- 주로 데이터의 전반적인 분포를 visualization 할때 매우 유용 (Scatter plot 사용)
- n_components를 2이외의 값으로 주어 모델의 feature 개수를 줄여 효과적인 학습
- Feature analysis
- 데이터를 설명하는 feature x와 알아보고자 하는 label y가 있을 때, 어떠한 feature가 y를 설명하는데에있어
중요한 feature 인지 아는 것 또한 매우 중요 - Logistic regression이나 linear regression, Support vector machine, 그리고 random forest 모두
학습이 된 상태에서 어떠한 feature를 주로 보고있는지를보여주는 값들을 가지고 있다. - 각 feature들과 label 간의 상관관계 분석을 통해 어떤 feature가 중요한지를 안다면 의사결정 과정에서 큰도움이 될 수 있습니다 (e.g. 문제를 일으키는 주된 원인이 무엇인지 파악할 경우)
- 데이터를 설명하는 feature x와 알아보고자 하는 label y가 있을 때, 어떠한 feature가 y를 설명하는데에있어
- Feature analysis - Linear regression, Logistic regression
- Regression에서의 Linear regression, Classification에서의 Logistic regression 모두 학습이 된
상태에서 .coef_ 와 .intercept_ 를 조회할 수 있습니다 - .coef_는 각 feature들에 대해서 각각 곱해지는 값, .intercept_ 는 절편을 의미합니다
- .coef_의 절대값이 상대적으로 큰 feature가 있다면, label을 설명하는데 중요한 feature일 수 있다.
- Regression에서의 Linear regression, Classification에서의 Logistic regression 모두 학습이 된
- Feature analysis - Random forest
- Random forest 모델들에서는 자체적으로 feature importance score를 제공
- .feature_importances_ 를 통해 각 feature의 importance score를 구할 수 있다.
- Feature analysis - 상관관계 분석
- 각 feature들과 label간의 상관관계 분석을 통해 feature의 중요도를 알아볼 수 있다.
- 상관관계: 통계적 변인과 다른 여러 통계적 변인들이 공변(共變)하는 함수관계
- pearsonr(): 피어슨 상관계수 두 변수간의 선형 상관관계의 정도를 나타내준다.
- spearmanr(): 스피어만 상관계수 두 변수간의 크기 순서상의 상관관계의 정도를 나타내준다.
- 두 상관계수 모두 1/-1에 가까울 수록 양/음의 상관관계가 있다고 이야기 할 수 있고,
같이 나오는 p-value의 경우 H0: 두 변수는 상관관계가 없다 라고 하는 가설에 대한 p-value 입니다
공부하면서 어려웠던 점
- 결국 모델링도 신뢰성을 확보하기 위한 과정중 하나임을 기억해야하는 것 같다. 일단 배우긴 했는데 잘 적용할 수 있을지 의문이 듭니다. 한번 사용해봐야 할 것 같
반응형
'데이터분석' 카테고리의 다른 글
41. 데이터 웨어하우스, 데이터 파이프라인 (0) | 2024.01.29 |
---|---|
35. 데이터 분석 프로세스 (1) | 2024.01.27 |
33-(3). seaborn (1) | 2024.01.15 |
33-(2). Matplotlib (1) | 2024.01.15 |
33-(1) Matplotlib Visualization - 기본문법 (1) | 2024.01.14 |