ADsP_3과목_2_통계분석_2_QnA
## 8.의사결정나무
```python
# 관련 교재 (3-82. 불순도 측정 지표 - P482, 3-82의 문제3 - P487)
요약
- 지니 지수, 엔트로피 지수 :
- '자체가 불순도를 의미'함
- 따라서 작은 값을 선택해야 함, 불순도가 작다는 것이 순수도가 높아지며
- '순수도가 높은 것을 분류를 잘한 것'으로 봄
- 엔트로피 지수는 p=0.5 (확률이 0.5)일 때 가장 불순도가 높은 것임
- 카이제곱통계량의 p-value :
- 카이제곱통계량을 구할 때 '동질성 검사'를 사용함, 즉 동질성 검사의 결과임
- 동질성 검사의 가설
귀무 : A의 종류에 따라 B가 같다
대립 : A의 종류에 따라 B가 다르다 - '대립가설이 채택' 되어야 함
(대립가설이 채택되면 : 어떤 독립변수를 사용해서, 종속변수의 구분이 잘 된다는 뜻)
- Chi-Square 값이 클 수록 p-value가 작음의 의미
- p값이 작을수록 자식노드내의 이질성이 큼을 나타냄 ('카이제곱 이용시, 이질성이 커야 좋음')
```
아래의 내용은 근거 자료입니다.
- 인터넷에 여러 가지로 이야기 되고 있어서 주의하셔야 합니다.
```python
Chi-Square의 가설
- 독립성검정, 동질성 검정의 구분 : https://hsm-edu.tistory.com/1215 -> 동질성 검사인 이유
- https://m.blog.naver.com/pmw9440/221830209173 -> 동질성 검사의 가설
```
```python
의사결정나무에서
Chi-Square 값이 큰 것 또는 p-value가 작은 것을 선택 함의 증거
# https://www.analyticsvidhya.com/blog/2020/06/4-ways-split-decision-tree/ (하단)
# - Decision Tree Splitting Method #4: Chi-Square 부분 참조
# http://koreascience.kr/article/JAKO200930265651796.pdf (3번째 - 61 페이지 왼쪽)
# 다른 자료 : https://yschoi.pusan.ac.kr/sites/yschoi/download/DataMining/2-5.htm
```
```python
Chi-Square 값이 클 수록 p-value가 작음의 증명
- 흰색 바탕의 숫자들이 Chi-Square 통계량, 열이름 쪽으로 p-value
```

## 9.민트책(2022년도)에서 질문
### 9-1. 제2회 모의고사 20번

```python
답이 2번으로 되어 있는데... 저는 가장 올바른 것은 4번으로 생각됩니다.
해당 문제에 대해서는 민트책의 저자분께 의도를 물어봐야 할 것 같습니다.
최적의 예측 변수를 결정하는 방법은 아래와 같습니다.
2번 보기에서 표준화 자료로 추정한 계수가 가장 큰 변수라고 했는데
정규화 자료이며, 절대값을 취해서 큰 값으로 표기해야 더 정확할 것 같습니다.
```
최적의 예측 변수를 결정하는 방법은 여러 가지가 있습니다.
1. 상관행렬
- 가장 쉬운 방법 중 하나는 회귀 분석을 수행하기 전에 상관 행렬을 먼저 확인하는 것입니다.
- 일반적으로 상관 관계가 가장 높은 변수가 좋은 예측 변수입니다.
2. 계수 비교
- 계수를 비교하여 최적 예측 변수를 선택할 수도 있습니다
- 회귀 분석을 수행하기 전에 데이터를 정규화(normalization)해야 합니다.
- 계수의 절대값을 취해서 큰 값이 좋은 예측 변수입니다.
3. R-제곱 값의 변화
- 각 변수를 제거하고 어떤 변수가 최대 변화를 일으키는지 확인하는 방법을 사용합니다.
- R-제곱 값의 변화가 큰 것이 좋은 예측 변수 입니다 (설명력이 높은)
### 9-2. 제2회 모의고사 27번

```python
제 강의 교안 394 페이지에 정리된 내용을 보시면
'모형의 설명력을 확인'하기 위해서는 '결정계수(R^2)'를 사용한다고 되어 있습니다.
즉, 1번이 '상관계수'라고 해서 틀린 내용이 된 것입니다.
참고로 같은 페이지의 내용을 보시면 아래와 같이 되어 있습니다.
회귀계수의 t-value, p-value를 사용해 회귀 계수들이 유의미한지 확인할 수 있습니다.
F 통계량(F-value) 및 F통계량의 p-value를 이용해 모형이 통계적으로 유의미한지 확인할 수 있습니다.
잔차 통계량 확인 및 회귀진단을 진행해 모형이 데이터를 잘 적합하고 있는지 확인할 수 있습니다.
```
### 9-3. 제2회 모의고사 주관식 5번

```python
# 분산에 대한 정의를 알고 있으면 풀이할 수 있습니다.
경험한 내용이 아닐 경우 그 관계를 알기 위해
cm, m에 따른 변화를 쉬운 sample 데이터를 만들어 파악하고, 그것을 사용하면 됩니다.
```
```python
예를 들어 cm 데이터가 [100, 200] 이라고 생각하고 분산을 구합니다.
cm와 m의 단위 차이가 100이기 때문에 100 단위로 만들었습니다.
그러면 평균이 150 이기 때문에 분산은
= ((150-100)^2 + (150-200)^2) / 2 = (50^2 + 50^2) / 2 = 2500
이제, 단위를 m로 변경하면 [1, 2] 가 됩니다.
평균이 1.5 이기 때문에 분산은
= ((1.5-1)^2 + (1.5-2)^2) / 2 = (0.5^2 + 0.5^2) / 2 = 0.25
즉, 10000 배의 차이를 보인다는 것을 알 수 있습니다.
분산 식에 제곱이 들어가기 때문이죠. => 100^2, 1^2 => 10000, 1
답 : 225를 10000으로 나눈 값 0.0225 가 됩니다.
```
### 9-4. 제2회 모의고사 주관식 10번

```python
# 이런 문제가 나오면 그림을 그리셔야 합니다.
1. 아래 처럼 그림을 그리고, 좌표에 점을 찍고, 점의 이름을 표기합니다.
2. 첫 단계에서 형성되는 군집을 dist(x)의 결과에서 찾습니다.
문제에서 '최단연결법'이라고 했기 때문에 dist 결과값이 가장 작은
{d, e} 가 첫 단계에서 형성되는 군집입니다.
3. 좌표에서 {d, e} 군집과 a를 보면, d 가 a와 가깝습니다.
4. 그러므로 a와 d의 유클리드 거리를 구하면 됩니다.
dist(x)의 결과를 보면 a와 d의 유클리드 거리가 3.2 라고 표기 되어 있습니다.
답 : 3.2
```

#### 9-5.
```python
```
## 10.t값과 p-value의 관계
- https://math100.tistory.com/43 여기를 보시면 t값, p-value에 대한 표가 있습니다.
- t 값이 클 수록 p-value가 작은 것을 볼 수 있고, df (degree of freedom)에 따라 달라집니다.
- t값이 크다 작다를 판단할 때는 df와 함께 보셔야하고
- 이게 적분 개념이 포함 된 것이기 때문에 t값이 클 수록 0에서 멀리 떨어진 것이고 그래서 p-value가 작습니다.
```python
# 추가 설명은 다시 업데이트 하겠습니당
```
## 11.인공신경망
### 11-1.learning rate

```python
too low : 학습에 매우 오랜 시간이 걸릴 수 있음 (수렴)
just right : 적당한 학습시간 및 '수렴'
too high : 'global minimum' 에 수렴하지 않고 '발산'할 수 있음
```
## 12.AIC, BIC는 무엇인가요?
- 유의미한 좋은 독립변수를 선택하는 방법 중에 stepwise 방법이 있습니다.
- stepwise 방법의 종류 : 전진 선택법, 후진 제거법, 단계 선택법
- 일반적으로 결정계수를 보고 적절한 모델을 선택하게 되는데, **결정계수는 독립변수(=설명변수)가 많으면 증가**하게 됩니다.
- 이러한 부분의 조정을 위해 **조정된 결정계수, AIC, BIC, Mallow's Cp** 등을 보고 적절하게 판단합니다.
두 개의 서로 다른 선형 회귀 모형의 성능을 비교할 선택 기준
- 조정 결정 계수 (Adjusted determination coefficient)
- AIC (Akaike Information Criterion)
- BIC (Bayesian Information Criterion)
정보량 규준(information criterion)
- 최대 우도에 독립 변수의 갯수에 대한 손실(penalty)분을 반영하는 방법
- 손실 가중치의 계산 법에 따라 AIC (Akaike Information Criterion)와 BIC (Bayesian Information Criterion) 두 가지를 사용
- AIC는 모형과 데이터의 확률 분포 사이의 Kullback-Leibler 수준을 가장 크게하기 위한 시도에서 나옴
- BIC는 데이터가 exponential family라는 가정하에 주어진 데이터에서 모형의 likelihood를 측정하기 위한 값에서 유도됨
- AIC, BIC 둘 다 값이 작을 수록 올바른 모형에 가까움
```python
# 분류의 경우
# AIC = -2*log(likelihood) + 2*p
# BIC = -2*log(likelihood) + p*log(n)
# p: 변수의 갯수, n: 데이터 갯수
# 선형 회귀의 경우
# AIC = n*log(RSS/n) + 2*p,
# BIC = n*log(RSS/n) + p*log(n)
# 상기 log는 자연로그 입니다.
```
## 13.군집분석에서 BIC는?
- 왜곡 정도로 해석, BIC값이 가장 큰 것을 최적의 군집수로 사용함
## 14.신뢰구간
- 표본크기가 커질수록 신뢰구간이 좁아진다.
- 이는 정보가 많을수록 추정량이 더 정밀하다는 것을 의미한다의 의미는?

위의 '신뢰구간의 길이'를 구하는 공식을 보면,
- 신뢰도 95% 인 경우 1.96을 곱하고 있고,
- 신뢰도 99% 인 경우 2.58을 곱하고 있습니다.
- 이때, 1.96, 2.58은 신뢰도 95%, 99%를 위한 z값입니다.
- 이것을 보고 **신뢰도가 높을 수록 신뢰구간이 길어진다**는 것을 알 수 있습니다.
- 공식을 보면 표준편차를 데이터의 개수에 루트를 취하여 나누는 것을 볼 수 있습니다.
- 이것은 다른 것들이 동일할 때 n의 개수가 커지면 신뢰구간의 길이가 짧아진다는 것을 의미합니다.
- 예를 들어 95% 신뢰구간을 구한다고 했을 때, 표준편차가 1이라고 하면
- 신뢰구간의 길이는 $2 * \frac{1.96}{\sqrt{n}}$ 이 됩니다.
- 이때 n을 100이라고 했을 때 신뢰구간의 길이는 0.392
- n을 400이라고 했을 때 신뢰구간의 길이는 0.277 이 됩니다.
- 그리고 n의 수가 크다는 것은 '정보의 양'이 많다는 것이며
- 추정을 좀 더 잘 할 수 있기 때문에 같은 신뢰도에도 신뢰구간이 짧은 것으로 생각하시면 됩니다.
```python
import math
2 * 1.96 / math.sqrt(100), 2 * 1.96 / math.sqrt(200)
```
(0.392, 0.2771858582251266)
쉽게 예를 들어 엄마가 몇시에 들어올래? 라고 했을 때 '5시 ~ 7시 사이' 라고 답하면 이것이 구간 추정입니다.
다음 두 가지 경우 중에서 어떤 것이 좀 더 구간이 넓은 가요?
1. 5시 ~ 7시
2. 4시 ~ 8시
- 1번의 경우 신뢰구간의 길이가 2시간입니다.
- 2번의 경우 신뢰구간의 길이는 4시간입니다.
- 구간이 길기 때문에 그 안에 집에 도착할 수 있는 신뢰도가 높다고 보시면 됩니다.
그러면 같은 신뢰도를 갖으면서 신뢰구간을 짧게 잡을 수 있으려면 무엇이 필요할까요?
- 해당 상황에 대한 경험 횟수라고 할 수 있습니다.
- 여러 번 경험해 본 것에 대해서는 대략 몇 시에 도착하겠다는 예상시간을 보다 좁은 구간으로 정할 수 있게 되기 때문입니다.
```python
```
## 15.회귀분석 해석
summary(Hitters)
- NewLeague, League, Division 은 범주형 변수이다. (Factor형)
- Salary 는 결측치를 가지고 있다.
- Max. 값 아래에 NA's : 59 가 결측치 개수임
- summary(lm(Salary~., Hitters))를 보면 범주형 변수 중 두 번째 것만 표시되어 있다.
- 하나는 0 다른 하나는 1로 인지되기 때문이다. (두 번째 범주가 1)
- lm() 을 사용하여 선형모델을 만들었는데 Multiple R-squared: 0.5461 이기 때문에 선형적인 모델인지에 대해
```python
# 범주형만 복사해서 분리해 보았을 때
# 음수의 Estimate를 갖는 DivisionW, NewLeagueN 은
# Salary를 감소시키는 음의 관계이고
# LeagueN 은 Salary를 증가시키는 양의 관계이다.
# https://jangpiano-science.tistory.com/137 참조
Coefficients:
Estimate Std. Error t value Pr(>|t|)
LeagueN 62.59942 79.26140 0.790 0.430424
DivisionW -116.84925 40.36695 -2.895 0.004141 **
NewLeagueN -24.76233 79.00263 -0.313 0.754218
```
```python
> summary(Hitters)
AtBat Hits HmRun Runs RBI
Min. : 16.0 Min. : 1 Min. : 0.00 Min. : 0.00 Min. : 0.00
1st Qu.:255.2 1st Qu.: 64 1st Qu.: 4.00 1st Qu.: 30.25 1st Qu.: 28.00
Median :379.5 Median : 96 Median : 8.00 Median : 48.00 Median : 44.00
Mean :380.9 Mean :101 Mean :10.77 Mean : 50.91 Mean : 48.03
3rd Qu.:512.0 3rd Qu.:137 3rd Qu.:16.00 3rd Qu.: 69.00 3rd Qu.: 64.75
Max. :687.0 Max. :238 Max. :40.00 Max. :130.00 Max. :121.00
Walks Years CAtBat CHits CHmRun
Min. : 0.00 Min. : 1.000 Min. : 19.0 Min. : 4.0 Min. : 0.00
1st Qu.: 22.00 1st Qu.: 4.000 1st Qu.: 816.8 1st Qu.: 209.0 1st Qu.: 14.00
Median : 35.00 Median : 6.000 Median : 1928.0 Median : 508.0 Median : 37.50
Mean : 38.74 Mean : 7.444 Mean : 2648.7 Mean : 717.6 Mean : 69.49
3rd Qu.: 53.00 3rd Qu.:11.000 3rd Qu.: 3924.2 3rd Qu.:1059.2 3rd Qu.: 90.00
Max. :105.00 Max. :24.000 Max. :14053.0 Max. :4256.0 Max. :548.00
CRuns CRBI CWalks League Division PutOuts
Min. : 1.0 Min. : 0.00 Min. : 0.00 A:175 E:157 Min. : 0.0
1st Qu.: 100.2 1st Qu.: 88.75 1st Qu.: 67.25 N:147 W:165 1st Qu.: 109.2
Median : 247.0 Median : 220.50 Median : 170.50 Median : 212.0
Mean : 358.8 Mean : 330.12 Mean : 260.24 Mean : 288.9
3rd Qu.: 526.2 3rd Qu.: 426.25 3rd Qu.: 339.25 3rd Qu.: 325.0
Max. :2165.0 Max. :1659.00 Max. :1566.00 Max. :1378.0
Assists Errors Salary NewLeague
Min. : 0.0 Min. : 0.00 Min. : 67.5 A:176
1st Qu.: 7.0 1st Qu.: 3.00 1st Qu.: 190.0 N:146
Median : 39.5 Median : 6.00 Median : 425.0
Mean :106.9 Mean : 8.04 Mean : 535.9
3rd Qu.:166.0 3rd Qu.:11.00 3rd Qu.: 750.0
Max. :492.0 Max. :32.00 Max. :2460.0
NA's :59
> summary(lm(Salary~., Hitters))
Call:
lm(formula = Salary ~ ., data = Hitters)
Residuals:
Min 1Q Median 3Q Max
-907.62 -178.35 -31.11 139.09 1877.04
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 163.10359 90.77854 1.797 0.073622 .
AtBat -1.97987 0.63398 -3.123 0.002008 **
Hits 7.50077 2.37753 3.155 0.001808 **
HmRun 4.33088 6.20145 0.698 0.485616
Runs -2.37621 2.98076 -0.797 0.426122
RBI -1.04496 2.60088 -0.402 0.688204
Walks 6.23129 1.82850 3.408 0.000766 ***
Years -3.48905 12.41219 -0.281 0.778874
CAtBat -0.17134 0.13524 -1.267 0.206380
CHits 0.13399 0.67455 0.199 0.842713
CHmRun -0.17286 1.61724 -0.107 0.914967
CRuns 1.45430 0.75046 1.938 0.053795 .
CRBI 0.80771 0.69262 1.166 0.244691
CWalks -0.81157 0.32808 -2.474 0.014057 *
LeagueN 62.59942 79.26140 0.790 0.430424
DivisionW -116.84925 40.36695 -2.895 0.004141 **
PutOuts 0.28189 0.07744 3.640 0.000333 ***
Assists 0.37107 0.22120 1.678 0.094723 .
Errors -3.36076 4.39163 -0.765 0.444857
NewLeagueN -24.76233 79.00263 -0.313 0.754218
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Residual standard error: 315.6 on 243 degrees of freedom
(59 observations deleted due to missingness)
Multiple R-squared: 0.5461, Adjusted R-squared: 0.5106
F-statistic: 15.39 on 19 and 243 DF, p-value: < 2.2e-16
```
```python
```
## 16.과대적합(overfitting)
아래의 그림으로 보아주세요!
- 빨간색 선이 과대적합 된 회귀 모형에 대한 선이며, 색이 채워지지 않은 동그라미를 학습데이터로 보시면 error가 없이 모두 적합한 것을 볼 수 있습니다. (동그라미 위치가 실제, 빨간색 선이 예측값)
-그러나, 색이 채워진 동그라미를 평가 데이터로 생각할 때 초록색 선 근처에 있습니다만, 오차가 큰 것을 볼 수 있습니다.
-이것은 학습 데이터에 너무 잘 적합했기 때문입니다. - 따라서 다른 평가데이터에서는 성능이 좋지 못합니다. (= 민감하게 반응한다)
- 평가 데이터의 위치가 학습데이터와 비슷한 위치였다면 성능이 좋지만, 학습데이터와 다른 위치에 있는 경우 성능이 나쁘게 나오게 됩니다.
