반응형

0. 개요

보스턴 주택 가격 데이터셋은 머신 러닝과 회귀 분석 연습용으로 널리 활용되는 데이터셋 중 하나입니다. 이 데이터셋은 미국 매사추세츠주 보스턴 내 다양한 지역의 주택 가격과 주택 가격에 영향을 미치는 여러 가지 특성들을 포함하고 있습니다. 주로 회귀 분석의 예제로 사용되며, 집값을 예측하는 모델을 만들기 위한 데이터로 활용됩니다. 이 데이터셋은 Scikit-learn 라이브러리에 기본으로 내장되어 있어서 불러와서 사용할 수 있는데, 해당 파일을 블로그에도 첨부하였으니 자유롭게 다운하셔도 됩니다. 주요 칼럼값은 아래와 같습니다.

 

- CRIM: 지역별 1인당 범죄율

- ZN: 25,000 평방피트당 주거용 토지 비율

- INDUS: 비소매상업지역 면적 비율

- CHAS: 찰스 강 인접 여부 (1: 강 인접, 0: 강 미인접)

- NOX: 일산화질소 농도 RM: 주택당 평균 방 개수

- AGE: 1940년 이전에 건축된 주택의 비율

- DIS: 5개의 보스턴 고용 센터와의 거리에 대한 가중치

- RAD: 방사형 고속도로 접근성 지수

- TAX: $10,000당 재산세율

- PTRATIO: 학생-교사 비율

- B: 1000(Bk - 0.63)^2, 여기서 Bk는 지역별 흑인 비율

- LSTAT: 저소득 계층의 비율

- MEDV: 주택 가격의 중앙값

 

이 데이터셋을 활용하여 다양한 회귀 모델을 학습하고 집값을 예측하는 연습을 할 수 있습니다. 데이터의 다양한 특성을 이해하고 활용하여 모델을 개선하며, 데이터 분석 및 예측 능력을 향상시킬 수 있는 좋은 예제 중 하나입니다.

 

1. 파이썬 코드 - 회귀분석

#라이브러리 불러오기
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error

#데이터 불러오기
boston_data = pd.read_csv('HousingData.csv')

#결측치 확인 및 제거
boston_data.isnull().sum()
boston_data = boston_data.dropna(axis=0)

#데이터 분할
X=boston_data.drop('MEDV',axis=1)
y=boston_data['MEDV']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 선형 회귀 모델 생성 및 학습
model = LinearRegression()
model.fit(X_train, y_train)

#테스트 데이터에 대한 예측
y_pred = model.predict(X_test)

# 평가: 평균 제곱 오차(Mean Squared Error) 계산
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')

 

2. 탐색적 데이터 분석(EDA)

1) 데이터 구조

boston_data.head()

CRIM부터 MEDV까지 총 14개의 칼럼값을 가지고 있습니다.

 

2) 상관 분석

# 상관 분석 시각화
correlation_matrix = boston_data.corr()
plt.figure(figsize=(12, 8))
sns.heatmap(correlation_matrix, annot=True)
plt.title('Correlation Matrix')
plt.show()

- 'RM' (방 개수)은 'MEDV' (주택 가격)와 양의 상관 관계를 가지는 밝은 색을 보여줍니다. 이는 방의 개수가 증가할수록 주택 가격도 증가하는 경향을 나타냅니다.

- 'LSTAT' (저소득 계층의 비율)은 'MEDV'와 음의 상관 관계를 가집니다. 이는 저소득 계층의 비율이 높을수록 주택 가격이 낮아지는 경향을 나타냅니다.

- 'RAD' (방사형 고속도로 접근성 지수)와 'TAX' ($10,000당 재산세율)는 서로 강한 상관 관계를 보입니다. 

 

 

3) 주택 가격 분포

# 주택 가격 분포
plt.figure(figsize=(8, 6))
sns.histplot(data=boston_data, x='MEDV', bins=30, kde=True)
plt.title('Distribution of Housing Prices (MEDV)')
plt.show()

4) 방 개수와 주택 가격간 관계

# 방 개수와 주택 가격 분포
plt.figure(figsize=(8, 6))
sns.scatterplot(data=boston_data, x='RM', y='MEDV')
plt.title('Relationship between Rooms (RM) and Housing Prices (MEDV)')
plt.show()

3. 결측값 확인

파이썬에서 결측값을 확인하고 처리하는 방법은 데이터 전처리 과정에서 중요한 부분입니다.

boston_data.isnull().sum()

 

결측값을 지우는 방법도 있고, 평균이나 최빈값으로 대체하는 방법도 있는데 나는 지우는 방법을 선택하였습니다.

boston_data = boston_data.dropna(axis=0)

 

4. 모델 성능 평가

1) 성능 평가

# 평가: 평균 제곱 오차(Mean Squared Error) 계산
mse = mean_squared_error(y_test, y_pred)
print(f'Mean Squared Error: {mse:.2f}')
Mean Squared Error: 31.45
 

 

파이썬 머신러닝에서 모델 성능 평가는 매우 중요한 이유가 있습니다. 모델의 성능을 평가하는 것은 모델이 얼마나 좋은 예측을 하는지를 이해하고 개선하는 데 도움을 주는 핵심적인 단계입니다.

 - 비즈니스 의사 결정에 활용: 머신러닝 모델은 비즈니스 의사 결정을 지원하는 데 사용될 수 있습니다. 모델의 예측 능력이나 신뢰도를 평가함으로써, 예를 들어 상품 판매 예측, 금융 리스크 평가 등과 같은 중요한 결정에 도움을 줄 수 있습니다.

- 성능 개선: 성능 평가를 통해 모델의 약점이나 부족한 부분을 파악하고 개선할 수 있습니다. 예측의 정확도를 높이거나 편향을 줄이는 등 모델을 보다 강력하게 만들기 위한 방법을 찾을 수 있습니다.

- 과적합 및 과소적합 판단: 모델 성능 평가는 과적합(Overfitting)이나 과소적합(Underfitting)과 같은 문제를 판단하는데 도움을 줍니다. 훈련 데이터에 대한 예측 능력과 테스트 데이터에 대한 예측 능력을 비교하여 모델의 일반화 능력을 평가할 수 있습니다.

- 모델 해석: 모델의 성능 평가 결과는 모델이 어떤 특성을 중요하게 생각하는지, 어떤 특성이 예측에 큰 영향을 주는지 등을 파악하는 데 도움을 줍니다.

 

2) 시각화 - 실제값과 예측값을 비교하는 그래프

#라이브러리 
import matplotlib.pyplot as plt

#그래프 설정
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred, color='blue')
plt.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], linestyle='--', color='red', linewidth=2)
plt.xlabel('Actual Price')
plt.ylabel('Predicted Price')
plt.title('Actual vs Predicted House Prices')
plt.show()

 

HousingData.csv
0.03MB

반응형
Posted by 마르띤
,
반응형

문제인식: 매스미디어 광고에 의한 신규유저수가 일정치 않다. 이는 매월 TV광고와 잡지 광고의배분이 일정하지 않기 때문이다. 이에 TV, 잡지 광고비와 신규 유저수의 관계를 파악한다.

 

해결 방법: TV, 잡지 광고비와 신규 유저수 데이터를 기반으로 중회귀분석을 실시한다.

 

R

1. 데이터 읽어 들이기

> ad.data <- read.csv('ad_result.csv',header=T,stringsAsFactors = F)

> ad.data

month  tvcm magazine install

1  2013-01  6358     5955   53948

2  2013-02  8176     6069   57300

3  2013-03  6853     5862   52057

4  2013-04  5271     5247   44044

5  2013-05  6473     6365   54063

6  2013-06  7682     6555   58097

7  2013-07  5666     5546   47407

8  2013-08  6659     6066   53333

9  2013-09  6066     5646   49918

10 2013-10 10090     6545   59963

 

2. TV 광고의 광고비용과 신규 유저수의 산점도 그리기

> library(ggplot2)
> library(scales)

> ggplot(ad.data,aes(x=tvcm,y=install))

 

 

> ggplot(ad.data,aes(x=tvcm,y=install))+geom_point()

 

 

> ggplot(ad.data,aes(x=tvcm,y=install))+geom_point()+xlab('TV 광고비')+ylab('신규유저수')

 

 

> ggplot(ad.data,aes(x=tvcm,y=install))+geom_point()+xlab('TV 광고비')+ylab('신규유저수')+scale_x_continuous(label=comma)+scale_y_continuous(label=comma)

 

 

 

3. 잡지 광고의 광고비용과 신규 유저수의 산점도 그리기

> ggplot(ad.data,aes(x=magazine,y=install))+geom_point()+xlab('잡지 광고비')+ylab('신규유저수')+scale_x_continuous(label=comma)+scale_y_continuous(label=comma)

  

 

 

 

4. 회귀분석 실행

> fit <-lm(install~.,data=ad.data[,c('install','tvcm','magazine')])

> fit

 

Call:

  lm(formula = install ~ ., data = ad.data[, c("install", "tvcm",

                                               "magazine")])

 

Coefficients:

  (Intercept)         tvcm     magazine 

188.174        1.361        7.250 

 

-> 이상 내용으로부터 아래와 같은 모델을 만들 수 있다.

신규 유저수 = 1.361 X TV광고비 + 7.25 X 잡지광고비 + 188.174

이라는 관계가 있으며, 신규 유저는 광고를 실시하지 않을 때 월 188명 정도이다. (아래 summary(fit)을 통해 유의하지 않음을 알 수 있다) 그리고 TV 광고에 1만원을 투입하면 양 1.3609명의 신규 고객을, 잡지 광고에 1만원을 투자하면 약 7.2498명의 신규 유저를 확보할 수 있다.

 

5. 회귀분석의 결과 해석

> summary(fit)

 

Call:

  lm(formula = install ~ ., data = ad.data[, c("install", "tvcm", "magazine")])

 

Residuals:

  Min       1Q   Median       3Q      Max

-1406.87  -984.49   -12.11   432.82  1985.84

 

Coefficients:

  Estimate Std. Error t value Pr(>|t|)  

(Intercept)  188.1743  7719.1308   0.024  0.98123  

tvcm         1.3609     0.5174   2.630  0.03390 *

magazine     7.2498     1.6926   4.283  0.00364 **

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 1387 on 7 degrees of freedom

Multiple R-squared:  0.9379,           Adjusted R-squared:  0.9202

F-statistic: 52.86 on 2 and 7 DF,  p-value: 5.967e-05

 

잔차(Residuals) : 잔차(예측값과 측정값의 차이)분포를 사분위수로 표현한 것으로, 데이터의 치우침이 있는지 확인할 수 있다. 1Q의 절대값이 3Q의 절대값보다 커서 약간 치우침이 있어 보인다.

 

Coefficients : 절편과 기울기에 관한 개요.

 

Adjusted R-Squared : 0.9202로 이 모델로 전체 데이터의 약 92.02%를 설명할 수 있다.

 

또는 아래와 같이 회귀분석 모델을 만들 수 있다.

> fit2<-lm(install~tvcm+magazine,data=ad.data)

> summary(fit2)

 

Call:

  lm(formula = install ~ tvcm + magazine, data = ad.data)

 

Residuals:

  Min       1Q   Median       3Q      Max

-1406.87  -984.49   -12.11   432.82  1985.84

 

Coefficients:

  Estimate Std. Error t value Pr(>|t|)  

(Intercept)  188.1743  7719.1308   0.024  0.98123  

tvcm           1.3609     0.5174   2.630  0.03390 *

magazine       7.2498     1.6926   4.283  0.00364 **

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 1387 on 7 degrees of freedom

Multiple R-squared:  0.9379,              Adjusted R-squared:  0.9202

F-statistic: 52.86 on 2 and 7 DF,  p-value: 5.967e-05

 

출처: 비지니스 활용 사레로 배우는 데이터 분석: R (사카마키 류지, 사토 요헤이 지음)

 

반응형
Posted by 마르띤
,
반응형

6.1 회귀분석

) 페인트의 불순도는 페인트를 얼마나 빨리 저어주느냐에 따라 달라진다. 아래표는 휘젓는 장치의 회전율과 불순도를 측정한 데이터이다.

x(회전율)

20

22

24

26

28

30

32

34

36

38

40

42

y(불순도)

8.4

9.5

11.8

10.4

13.3

14.8

13.2

14.7

16.4

16.5

18.9

18.5

> setwd('c:/Rwork')

> paint=read.csv('paint.csv')

> paint

x    y

1  20  8.4

2  22  9.5

3  24 11.8

4  26 10.4

5  28 13.3

6  30 14.8

7  32 13.2

8  34 14.7

9  36 16.4

10 38 16.5

11 40 18.9

12 42 18.5

> out=lm(y~x,data=paint)

> plot(y~x,data=paint)

> abline(out)


> out

 

Call:

  lm(formula = y ~ x, data = paint)

 

Coefficients:

  (Intercept)            x 

-0.2893       0.4566 

 

> summary(out)

 

Call:

  lm(formula = y ~ x, data = paint)

 

Residuals:

  Min      1Q  Median      3Q     Max

-1.1834 -0.5432 -0.3233  0.8333  1.3900

 

Coefficients:

  Estimate Std. Error t value Pr(>|t|)   

(Intercept) -0.28928    1.22079  -0.237    0.817   

x            0.45664    0.03844  11.880 3.21e-07 ***

  ---

  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 0.9193 on 10 degrees of freedom

Multiple R-squared:  0.9338,           Adjusted R-squared:  0.9272

F-statistic: 141.1 on 1 and 10 DF,  p-value: 3.211e-07

 

회귀식 Y = -0.28928 + 0.45664X

기울기 0.45664 p-value 3.21e-07로 유의.

결정계수R2 0.9338, 총 변동 중 93.38%가 회귀모형에 의해 설명되고 있다. 이는 두 변수 사이의 피어슨 상관계수의 제곱이다.


> with(paint,cor(x,y))^2

[1] 0.933832

 

 F(df1=1,df2=10) 141.1 p-value 3.21e-07로 유의.


cor.test()로 구한 Pearson 상관계수의 t(df=10)=11.88, p-value 3.211e-07은 위의 p-value값과 일치한다. T 값인 11.88의 제곱  11.88^2 값은 141.1344로 모형의 적합성을 나타내는 F 141.1과 일치하고 당연히 p-value3.21e-07로 동일하다.

> with(paint,cor.test(x,y))

 

Pearson's product-moment correlation

 

data:  x and y

t = 11.88, df = 10, p-value = 3.211e-07

alternative hypothesis: true correlation is not equal to 0

95 percent confidence interval:

0.8810937 0.9907768

sample estimates:

cor

0.9663498

 

out으로 저장된 결과를 plot()을 이용하여 회귀진단에 필요한 그래프를 얻을 수 있다.

> par(mfrow=c(2,2))

> plot(out)

 

해석:표준화된 잔차의 Normal Q-Q plot이 직선에 가깝고 다른 그래프들도 별다른 추세를 보이지 않는다.

 

resid()을 이용하면 회귀분석 결과물로부터 잔차를 어을 수 있다. 이렇게 받은 잔차에 아래의 명령어를 이용하여 normal Q-Q Plot을 그릴 수 있다.

> qqnorm(resid(out))

> qqline(resid(out))


 

정확한 p-value를 알고 싶다면 shapiro.test()를 이용하여 잔차가 정규분포를 따르는지 검정한다.

> shapiro.test(resid(out))

 

Shapiro-Wilk normality test

 

data:  resid(out)

W = 0.9196, p-value = 0.2826

H0 정규분포를 따른다

H1 정규분포를 따르지 않는다

 

p-value 0.2826로 잔차는 정규분포 가정을 만족시킨다분산분석을 통하여도 회귀의 유의성을 검정할 수 있다.

> anova(out)

Analysis of Variance Table

 

Response: y

Df  Sum Sq Mean Sq F value    Pr(>F)   

x          1 119.275 119.275  141.13 3.211e-07 ***

Residuals  10   8.451   0.845                     

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 


6.2 공분산분석

실험이 잘 통제되어 종속변수Y의 변동을 설명하는 데 그룹변수 이외에 다른 변인이 없다면 Two-sample t-test나 일원분산분석을 하면 된다. 그러나 현실적으로 통제는 쉽지 않기 때문에 이 경우에는 여러가지 다른 변수들을 통제해주어 조사하고자 하는 변수만의 효과를 조사해야 한다. 공분산분석은 분산분석에 연속형 변수를 추가한 것이다. 궁극적인 목적인 각 그룹 간 평균들의 차이가 있는 검정하는 것으로 분산분석과 동일하나, 통제가 안 되는 연속형 변수(covariate)를 추가하여 오차를 줄이고 검정력을 높이는 것이 차이점이다.

기계1

기계2

기계3

y 강도

x 섬유 두께

y 강도

x 섬유 두께

y 강도

x 섬유 두께

36

20

40

22

35

21

41

25

48

28

37

23

39

24

39

22

42

26

42

25

45

30

34

21

49

32

44

28

32

15

 

lm(y~공변량변수 + 그룹변수)

> machine<-read.csv('machine.csv')

> head(machine)

machine  y  x

1      m1 36 20

2      m1 41 25

3      m1 39 24

4      m1 42 25

5      m1 49 32

6      m2 40 22

> levels(machine$machine)

[1] "m1" "m2" "m3"

해석: m1기계1이 대조군이고 m2 m3은 비교군이다.

 

> out=lm(y~x+machine,data=machine)

> anova(out)

Analysis of Variance Table

 

Response: y

Df  Sum Sq Mean Sq  F value   Pr(>F)   

x          1 305.130 305.130 119.9330 2.96e-07 ***

machine    2  13.284   6.642   2.6106   0.1181   

Residuals 11  27.986   2.544                     

---

  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 해석: p-value 0.1181로 기계 간의 차이가 있다고 결론을 내릴 수 없다



summary()로 자세한 결과물을 보자.

> summary(out)

 

Call:

  lm(formula = y ~ x + machine, data = machine)

 

Residuals:

  Min      1Q  Median      3Q     Max

-2.0160 -0.9586 -0.3841  0.9518  2.8920

 

Coefficients:

  Estimate Std. Error t value Pr(>|t|)   

(Intercept)   17.360      2.961   5.862 0.000109 ***

x              0.954      0.114   8.365 4.26e-06 ***

machinem2      1.037      1.013   1.024 0.328012   

machinem3     -1.584      1.107  -1.431 0.180292   

---

  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 1.595 on 11 degrees of freedom

Multiple R-squared:  0.9192,        Adjusted R-squared:  0.8972

F-statistic: 41.72 on 3 and 11 DF,  p-value: 2.665e-06

해석: m2 reference m1와 비교한 machinem2 p-value값이 0.328012이고 m3 m1과 비교한 machinem3 p-value 0.180292이다. 그러나 이 p-value들을 조정없이 사용하여 두 machine 모두 m1와 유의한 차이가 없다고 결론을 내리지는 않는다.

 

1개의 대조군(m1) 2개의 비교군과 비교하므로 Dunnett의 방법으로 p-value를 조정한다.

> library(multcomp)

> dunnett=glht(out,linfct=mcp(machine='Dunnett'))

> summary(dunnett)

 

Simultaneous Tests for General Linear Hypotheses

 

Multiple Comparisons of Means: Dunnett Contrasts

 

 

Fit: lm(formula = y ~ x + machine, data = machine)

 

Linear Hypotheses:

  Estimate Std. Error t value Pr(>|t|)

m2 - m1 == 0    1.037      1.013   1.024    0.518

m3 - m1 == 0   -1.584      1.107  -1.431    0.304

(Adjusted p values reported -- single-step method)

> plot(dunnett)

 


 해석:  p-value 모두가 원래 p-value보다 커졌으며, 여전히 유의한 차이가 있다고 결론을 지을 수 없다. Plot 그래프로 확인할 수도 있다. 신뢰구간이 0을 포함하고 있으므로 유의하다고 볼 수 없다.

 

summary(out)

dunnett

m2

0.328012

0.518

m3

0.180292

0.304

 

> with(data=machine,tapply(y,machine,mean))

m1   m2   m3

41.4 43.2 36.0

> with(data=machine,tapply(y,machine,sd))

m1       m2       m3

4.827007 3.701351 3.807887

해석: 각 기계에서 생산된 섬유 제품의 강도 평균은 41.4, 43.2, 36.0으로 얻어져 혹시 차이가 있다면 기계3 강도가 떨어지는 하다.


출처: 실험 계획과 응용, R로 하는 통계 분석

반응형
Posted by 마르띤
,
반응형

분석사례

어떤 슈퍼마켓에서 고객이 구입하는 상품의 금액과 카운터에서 값을 치르는 데 걸리는 시간 사이에 회귀함수 관계가 있는가를 알아보기 위해 10명의 고객을 임의로 추출하여 데이터를 얻었다. R을 이용하여 회귀 모형을 적합해 보자.

 

  

1. 자료를 읽어 산점도를 그려보자.

> setwd('c:/Rwork')

> super=read.table('supermarket.txt',header=T)

> head(super)

  price time

1   6.4  1.7

2  16.1  2.7

3  42.1  4.9

4   2.1  0.3

5  30.7  3.9

6  32.1  4.1

> length(price)

[1] 10

> a<-1:10

> attach(super)

> plot(price,time,pch=a)

 

 

 


2. 회귀모형과 분석분석표 구하기

> super.lm=lm(time~price,data=super)

> plot(super$price,super$time)

> abline(super.lm,lty=2,col='BLUE')

 

  

> summary(super.lm)

 

Call:

lm(formula = time ~ price, data = super)

 

Residuals:

     Min       1Q   Median       3Q      Max

-0.37928 -0.32771 -0.04431  0.32231  0.56126

 

Coefficients:

            Estimate Std. Error t value Pr(>|t|)   

(Intercept)  0.396460   0.191488    2.07   0.0722 . 

price             0.115982   0.008979   12.92 1.22e-06 ***

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

 

Residual standard error: 0.3925 on 8 degrees of freedom

Multiple R-squared:  0.9542,    Adjusted R-squared:  0.9485

F-statistic: 166.9 on 1 and 8 DF,  p-value: 1.221e-06

 

> anova(super.lm)

Analysis of Variance Table

 

Response: time

          Df  Sum Sq Mean Sq F value    Pr(>F)   

price        1 25.7036 25.7036  166.85 1.221e-06 ***

Residuals  8  1.2324  0.1541                     

---

Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

> qf(0.95,1,8)

[1] 5.317655

> 1-pf(166.85,1,8)

[1] 1.220851e-06

데이터 해석을 해 보자

회귀계수 추정값은 time hat = 0.396 + 0.116 X price 

② 기울기에 대한 t-값은 12.92이고, p-값은 1.221e-06 = 1.221 X 1106 로 그 값이 매우 적기 때문에 유의하다. 

③ F-값은 166.85 이고, 이에 대한 p-값은 1.221e-06으로서 적합된 회귀직선이 유의하다는 것을 알 수 있다.


F0 = 166.85 > F 기각역 F(1,8;0.05)의 값 qf(0.95,1,8) = 5.317655 


이므로 귀무가설 H0 : β1 = 0을 기각한다. 따라서 구해진 회귀직선이 유의하다. 


유의 확률 값은 1-pf(166.85,1,8) = 1.22081 X 106 


로서, 유의확율 p-값을 이용한 검정은 유의확률 p-값 < 유의수준 α(=0.05)이면 회귀방정식이 유의하다는 것을 나타낸다.

  추정값의 표준오차(standard error of estimate) = 0.3925 = MSE의 제곱근 sqrt(0.1541)

 결정 계수는 0.9542 = SSR / SST = 25.7036 / (25.7036 + 1.2324), 총 변동 중에서 회귀 방정식으로 설명되는 부분이 95.42%라는 것을 나타낸다.


 

3. 잔차, 추정값 보기 및 잔차 그림 그리기

> names(super.lm)

 [1] "coefficients"  "residuals"     "effects"       "rank"        

 [5] "fitted.values" "assign"        "qr"            "df.residual" 

 [9] "xlevels"       "call"          "terms"         "model"       

> cbind(super,super.lm$resi,super.lm$fit)

   price time super.lm$resi super.lm$fit

1    6.4  1.7    0.56125840     1.138742

2   16.1  2.7    0.43623742     2.263763

3   42.1  4.9   -0.37928275     5.279283

4    2.1  0.3   -0.34002095     0.640021

5   30.7  3.9   -0.05709314     3.957093

6   32.1  4.1   -0.01946730     4.119467

7    7.2  1.2   -0.03152683     1.231527

8    3.4  0.5   -0.29079696     0.790797

9   20.8  3.3    0.49112416     2.808876

10   1.5  0.2   -0.37043203     0.570432

> plot(price,super.lm$resi,pch=19)

> abline(h=0,lty=2)


-> time은 실제 소요 시간, super.lm$fit 추정값, super.lm$resi 잔차. 잔차는 실제값과 추정값 차이

   abline(h=0,lty=2) 잔차가 0 선을 그리되, 라인 타입을 점선(lty=2)으로 그리라는 명령이다. 그림에서 보면 잔차는 0 중심으로 일정한 범위 내에 있으므로 회귀에 대한 기본 가정을 만족한다고 있으나, X 증가함에 따라 곡선관계를 보여주고 있다. 따라서 2 곡선 회귀식 Ŷ = b0 + b1X = b2X2을 구해보는 것도 의미가 있으리라 생각된다.

 

4. 추정값의 신뢰대 그리기

> p.x = data.frame(price=c(1,45))

> pc = predict(super.lm,int='c',newdata=p.x)

> pred.x=p.x$price

> plot(super$price,super$time,ylim=range(super$time,pc))

> matlines(pred.x,pc,lty=c(1,2,2),col='BLUE')

 

 


걸음만 단계. 무한 반복과 많은 연습이 필요.



반응형
Posted by 마르띤
,
반응형

목표변수가 연속형인 경우 -> 선형 회귀모델, ex) 광고비 투입 대비 매출액

목표변수가 두 개의 범주를 가진 이항형인 경우 -> 로지스틱 회귀모형, ex) 좋다1, 나쁘다0


 

2.1 선형회귀모형(linear regression model)

① 모형의 정의


Y= β0 + β1X1i + β2X2i +…..+ βpXpi + εi,   i = 1,…, n


- β0, β1, β2, …. Βp 를 회귀 모수(regression parameters) 또는 회귀 계수(regression coefficients)로서 알려지지 않는 상수이다.

εi Yi의 근사에서 오차(error)

 

회귀 모수의 추정

림에서 보듯이 주로 각 관측치로부터 회귀직선까지의 수직거리 제곱의 합을 최소화하는 회귀모수를 찾는 최소제곱추정법(LSE: least square estimation)을 이용한다. 즉 오 εi= Y - β0 - β1X1i - β2X2i -…..- βpXpi의 제곱합이다.


이 오차의제곱합을 최소화하는 추정값을 이용한 최소제곱회귀직선(least square regression line) 다음과 같으며, 오차항εi은 없다.



회귀 계수의 해석

회귀계수 βj 다른 입력 변수들이 일정할 j번째 입력변수가 단위 변동할 대응하는 Y 변동 양으로 해석. , βj 다른 입력변수를 보정한 후에 Y 대한 Xj 기여도. 회귀계수 βj 양수이면 Xj 증가할 Y 증가하고, 반대로 βj 음수이면, Xj 증가할 Y 감소함을 의미한다.


 

④ 입력 변수의 중요도




t값의 절대 값이 클수록 영향력이 크다고 할 수 있다. P-값이 유의수준 (보통 0.05)보다 작을 때 

귀무가설 H0 : β1 = 0

대립가설 H1 : β1 0

 

귀무가설을 기각하여, Xj의 영향력이 있다고 말할 수 있다.

 

⑤ 모형의 적합도 – F

모형의 상수항 β0을 제외한 모든 회귀계수가 0인지 아닌지를 검정하는 측도를 F-값이라 한다.

F-값은 회귀직선에 의해 평균적으로 설명할 수 있는 부분(MSR: mean squared regression)을 설명할 수 없는 부분(MSE: meas squared erroe)으로 나눈 값.

F =

MSR

=

SSR/p

MSE

SSE/(n-p-1)

 

F-값이 크면 p개 입력변수 중에 최소한 하나는 유의하다(회귀계수가 0이 아니다)라는 뜻이고, F-값이 작아서 p-(보통 0.05) 보다 크면 모든 입력변수가 유의하지 않아서 회귀선이 쓸모가 없다.

 

⑤ 모형의 적합도 결정계수 R2

모형의 적합도(goodness-of-fit)를 결정계수(coefficient of determination) R2으로 측정할 수 있다.

결정계수 R2는 설명할 수 있는 부분의 총합을 변동의 총합으로 나눈 값으로 0 1사의 값을 지닌다.

R2=

SSR

= 1 -

SSE

SST

SST

 

R2 1에 가까울수록 모형이 데이터에 더 잘 적합되었다(fitted), 또는 회귀직선이 설명력이 높다라고 말할 수 있다.

 

다만, 모형에 포함된 변수의 수(p)가 증가하면 할수록 R2은 증가하므로 변수의 수가 다른 모형을 비교할 때는 수정된(adjusted) R2를 사용

Ra2=

Adjusted R2

= 1 -

n-1

n-p-1

 

Ra2은 변수의 수가 증가한다고 항상 증가하지는 않는다.

 

⑤ 모형의 적합도 – AIC

입력변수의 수가 다른 모형을 비교 평가하는 기준으로 AIC(Akaike information criterion)을 사용한다.


AIC = nlog(SSE/n) + 2p

 

SSE는 오차제곱합으로 작을수록 모형이 적합이 잘 되었다고 할 수 있다. 입력변수의 수가 증가할수록 SSE는 감소하지만, 벌점 2p를 더한 AIC는 항상 감소하지는 않는다. 여러 후보 모형 중에서 AIC가 가장 작은 모형을 선택한다.

 

모형을 이용한 예측

주어진 데이터에 기반하여 회귀식 Ŷ을 얻었다고 하자. 임의의 객체 i*에 대해 관측한 입력변수의 값 x1i*, x2i*, …, xpi*를 그 회귀식에 대입하여 목표변수의 예측치 Ŷix를 얻을 수 있다.


즉, 기존 고객 데이터로 회귀식을 얻은 후, 수집한 새로운 고객의 입력변수 값을 회귀식에 대입하여 새로운 고객의 목표변수값을 예측하는 데 이용할 수 있다.


 

⑦ 예측력

목표변수가 연속형인 경우에 모형의 예측력 측도로서 MSE(mean squared error)를 주로 사용. 시각적으로 관측치(yi)와 예측치 Ŷi의 차이를 확인하기 위해서는 이들을 가로축 및 세로축에 놓고 그린 산점도가 45도 대각선을 중심으로 모여 있으면 예측력이 좋다고 할 수 있다.



반응형
Posted by 마르띤
,
반응형

회귀분석(regression analysis): 독립변수와 종속변수 간의 함수 관계를 규명하는 통계적인 분석방법


Ŷ=f(X)+ε


 - 독립변수(independent variable) 또는 설명변수(explanatory variable): 다른 변수에 영향을 주는 변수, 흔히 Y= β0 + β1X 공식에서 X

 - 종속변수(dependent variable) 또는 반응변수(response variable): 독립 변수에 의해 영향을 받는다는 변수, 흔히 Y= β0 + β1X 공식에서 Y

 

회귀(回歸)라는 말은다시 본디의 자리로 돌아온다라는 뜻으로 통계 분석에 처음 사용한 사람은 영국의 우생학자 Galton. 완두콩 실험을 통해 부모콩의 무게를 X, 자식콩의 무게를 Y축으로 산점도를 그리자, 이들의 관계식은 양이 관계이나 1보다 작아서 자식의 무게는 평균 무게로 회귀하려는 경향이 있다는 사실을 발견하고 이를 회귀(regression)으로 표현. 당시에 Galton 연구실에서 일하던 동료 연구원 Karl Pearson 이를 계량적으로 처음으로 분석하여 발표.

 

1. 데이터를 불러와서 산점도 그래프를 그리기

> market=read.table('market-1.txt',header=T)

> head(market,3)

NUMBER X  Y

1      1 4  9

2      2 8 20

3      3 9 22

> plot(market$X,market$Y,xlab='광고료',ylab='총판매액',pch=19)

> title('광고료와 판매액의 산점도')


 

2. 단순 회귀 분석 실시

> market.lm=lm(Y~X,data=market)

> summary(market.lm)

 

 

해석

추정값은 Coefficients: Estimate에서 확인. 추정된 회귀식은 Ŷ=-2.27 + 2.6 X

 


3. 산점도 위에 회귀직선을 그리자 - 회귀선의 추정

> abline(market.lm)

> identify(market$X,market$Y)

[1]  4  5 10

# Identify는 재미있는 함수인데, 본 함수를 입력하고 마우스로 점을 클릭하면 그림처럼 값을 알 수 있다.


> xbar = mean(market$X)

> ybar = mean(market$Y)

> xbar

[1] 8

> ybar

[1] 18.6

> points(xbar,ybar,pch=17,cex=2.0,col='RED')

> text(xbar,ybar,"(8,18.6)")

> fx <- "Y-hat = -2.27 + 2.6*X "

> text(locator(1),fx) #locator(1) 마우스로 클릭하면서 지정


 


4. 회귀식 특징

> names(market.lm)

[1] "coefficients"  "residuals"     "effects"       "rank"          "fitted.values"

[6] "assign"        "qr"            "df.residual"   "xlevels"       "call"        

[11] "terms"         "model"       

> market.lm$resid

1          2          3          4          5          6          7          8

0.8347826  1.4000000  0.7913043 -3.6000000 -1.6000000  0.9652174  4.6173913  1.1826087

9         10

-3.3826087 -1.2086957

> resid=market.lm$residual

> sum(resid) #특징1. 잔차의합은 0이다

[1] 0

> sum(market$X*resid) #특징2. 잔차들의 Xi 의한 가중합은 0이다

[1] 2.220446e-15

> sum(market.lm$fitted*resid) #특징3. 잔차들의 Yi 의한 가중합은 0이다

[1] -1.24345e-14

> names(market.lm)

 [1] "coefficients"  "residuals"     "effects"       "rank"         

 [5] "fitted.values" "assign"        "qr"            "df.residual"  

 [9] "xlevels"       "call"          "terms"         "model"        

> sum(market.lm$fitted.values)

[1] 186

> sum(market$Y)

[1] 186

#특징4. 추정값Yhat의 값과 관찰값Yi의 값은 같다.


5. 회귀모형의 정도

 - 산점도 위에 회귀직선을 그려 회귀선의 정도를 대략 짐작할 있으나, 이러한 경우는 독립변수가 하나인 경우에만 유용하게 쓰일 있다. 추정된 회귀선의 정도를 측정하는 여러 가지 측도(measure) 중에서 널리 이용되는 세가지를 알아보자

 ① 분산분석표에 의한 F-검정

 ② 결정계수

 ③ 추정값의 표준오차 

 ④ 상관계수와 결정계수


① 분산분석표에 의한 F-검정

요인

자유도

제곱합

평균제곱

F0

회귀

1

SSR(회귀제곱합)

MSR=SSR

MSR/MSE

잔차

n-2

SSE(잔차제곱합)

MES=SSE/n-2

 

n-1

SST( 제곱합)

 

 

- SST(Total sum of squares): 제곱합

- SSR(Sum of squares due to regression): 회귀제곱합, 설명되는 편차

- SSE(Sum of squares due to residual errors): 잔차제곱합, 설명되지 않는 편차

 

귀무가설 H0 : β1 = 0

대립가설 H1 : β1 0

 

F0 > F(1, n-2 ; α )이면 귀무가설 H0 : β1 = 0 기각하고, 회귀직선이 유의하다고 말한다. R분석 결과에서는 검정통계량 F0 대한 유의확률 p값이 제공된다. p < 유의확률 α이면 귀무가설 H0 : β1 = 0 기각한다

 

분산분석표

> anova(market.lm) #분산분석표

 

요인

자유도

제곱합

평균제곱

F0

회귀

1 = 1

SSR(회귀제곱합)

= 313.04

MSR=SSR

= 313.04

MSR/MSE

= 45.24

잔차

10-2 = 8

SSE(잔차제곱합)

= 55.36

MSE(잔차 평균제곱)  = SSE/n-2= 6.92

 

10-1 = 9

SST( 제곱합)

= 368.4

 

 

p값은0.0001487p < 유의확률 α 이므로 귀무가설  H0 : β1 = 0 기각한다, 따라서 회귀식은 유의하다.

 

> qf(0.95,1,8)

[1] 5.317655

유의수준 α =0.05에서 F-기각역 F(1,8;0.05)의 값은 5.32, " F0 = 45.24 > 5.32"이므로 귀무가설 기각, 회귀선은 유희하다

 

> 1-pf(45.25,1,8)

[1] 0.0001485485

유의확률 p값을 이용한 검정은 0.0001485485 이 값이 주어진 유의수준 α =0.05 보다 작을수록 귀무가설을 기각한다.

 


결정계수


R2=SSR/SST =1-SSE/SST


R2 결정계수(coefficient of determination)라고 부른다.


R2=SSR/SST = 313.04/368.4= 84.97%


이는 총변동 주에서 회귀직선에 의하여 설명되는 부분이 84.97%라는 의미로서, 추정된 회귀선의 정도가 높다는 것을 있다.

 

R 통해서도 있는데, Multiple R-squared 0.8497임을 있다.

> summary(market.lm)  



 

 추정값의 표준오차

선형회귀모형 Y= β0 + β1X + ε 을 표본의 자료로부터 적합시킬 때,


Y의 기댓값은 E(Y) = β0 + β1X, 분산은 σ2로 가정,


하였다. 따라서 Y의 측정값들이 회귀선 주위에 가깝게 있다면 σ의 추정값은 작아질 것이다. 

분산분석표에서 잔차평균제곱 MSE는 σ2의 불편추정량이 된다. 따라서 MSE의 제곱근을 추정값의 표준오차(standard error of estimate)라고 부르며, 다음과 같이 표현한다.



SY•X = SQRT(MSE) = SQRT(SSE/n-2) = 2.63


 

R 통해서도 있는데, Residual standard error 2.631임을 있다.

> summary(market.lm) 


 


상관계수와 결정계수

상관계수는 연속인 변수 간의 선형관계(linear relationship) 어느 정도인가를 재는 측도로서, 단순 회귀 분석에서는 상관계수 r 다음과 같이 구할 있다.


r = ±SQRT(R2 )


즉 상관계수는 결정계수 R2 제곱근이며, 만약 추정된 회귀선의 기울기 b1 양이면 양의 상관계수를 갖고, 기울기b1 음이면 음의 상관계수를 갖는다. 회귀식 Ŷ=-2.27 + 2.6 X에서 b1 2.6으로 양이므로 상관계수는 0.8497 sqrt , 0.9217임을 있다.

반응형
Posted by 마르띤
,
반응형

1. 목적: 광고비에 따른 신규 고객 증감에 따른 회귀 분석을 통해 광고비 투입 비중 결정

2. 출처: 비즈니스 활용 사례로 배우는 데이터 분석:R, 한빛미디어

3. 코딩

> library(httr) > library(stringr)

> ad.data<-read.csv("./ad_result.csv",header = T, stringsAsFactors = F) > ad.data #tvcm: tv광고금액, magazine: 잡지광고금액,install=신규고객수 month tvcm magazine install 1 2013-01 6358 5955 53948 2 2013-02 8176 6069 57300 3 2013-03 6853 5862 52057 4 2013-04 5271 5247 44044 5 2013-05 6473 6365 54063 6 2013-06 7682 6555 58097 7 2013-07 5666 5546 47407 8 2013-08 6659 6066 53333 9 2013-09 6066 5646 49918 10 2013-10 10090 6545 59963

#TV 광고와 신규 고객 산점도 > ggplot(ad.data,aes(x=tvcm,y=install))+geom_point()+xlab('TV 광고비')+ylab('신규 유저수')+ + scale_x_continuous(label=comma)+scale_y_continuous(label=comma)


#잡지 광고와 신규 고객 산점도 > ggplot(ad.data,aes(x=magazine,y=install))+geom_point()+xlab('잡지 광고비')+ylab('신규 유저수')+ + scale_x_continuous(label=comma)+scale_y_continuous(label=comma)


TV광고비, 잡지광고비가 신규 고객 획득에 어떤 영향을 주는지 알기 위해 회귀 분석을 해보자.

#회귀 분석

> fit<-lm(install~.,data=ad.data[,c("install","tvcm","magazine")]) > fit Call: lm(formula = install ~ ., data = ad.data[, c("install", "tvcm", "magazine")]) Coefficients:#모델식 (Intercept) tvcm magazine 188.174 1.361 7.250  

# 신규 고객=188.174 + TV광고금액x1.361 + 잡지광고금액x7.25

#회귀 분석 요약 > summary(fit) Call: lm(formula = install ~ ., data = ad.data[, c("install", "tvcm", "magazine")]) Residuals:#1Q 절대값이 3Q절대값보다 커서 치우침 Min 1Q Median 3Q Max -1406.87 -984.49 -12.11 432.82 1985.84 Coefficients: Estimate Std. Error t value Pr(>|t|) (Intercept) 188.1743 7719.1308 0.024 0.98123 tvcm 1.3609 0.5174 2.630 0.03390 * magazine 7.2498 1.6926 4.283 0.00364 ** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 Residual standard error: 1387 on 7 degrees of freedom

#결정계수와 조정 결정계수. 1에 가까울 수록 적합함 Multiple R-squared: 0.9379, Adjusted R-squared: 0.9202

F-statistic: 52.86 on 2 and 7 DF, p-value: 5.967e-05

<해석>

1) 1Q의 절대값이 3Q보다 커 치우치지만, 조정 결정계수가 0.92로 1에 가깝고, p값 역시 5.967e-05로 0.05보다 작기 때문에 본 회귀분석 모델 값은 유효하다고 판단할 수 있음.

2) 결정계수(Coefficient determination): R square라고도 하며, 예측식의 정확성을 분석하는 지표.  값이 클 수록 정확하다고 판단. 결정계수가 0.4이상이면 정확도에 문제가 없다고 판단. 1에 가까울수록 정확성이 크다, 신뢰도가 높다고 판단

3) P값: Probability의 P로 관련성이 없을 확률. P값이 0.05이상이면 즉, 관련성이 없을 확률이 5%이상이면 예측을 하는 데 도움이 되지 않는다고 판단.


4. 개선점

1) ggplot 함수 더 공부

2) 회귀분석에 대한 통계적인 공부:

 - 추정값, 표준오차, t값, p값, 통계적으로 유의한지, 결정계수, 조정결정계수

반응형
Posted by 마르띤
,