BookmarkSubscribeRSS Feed

[ SAS 활용 노하우 ] 데이터분석 2-1

Started ‎05-22-2021 by
Modified ‎05-22-2021 by
Views 1,160

 

이번 게시글은 여러가지 보스턴 집값 과 관련된 데이터를 활용하여 회귀분석으로 주택 가격을 예측할 것 입니다.

 

1. 데이터 Import

 


FILENAME REFFILE '/folders/myfolders/boston_house_train.csv';
PROC IMPORT DATAFILE=REFFILE
DBMS=CSV
OUT=work.train;
RUN;

PROC CONTENTS DATA=work.train; RUN;
%web_open_table(work.train);;
RUN;

FILENAME REFFILE '/folders/myfolders/boston_house_test.csv';
PROC IMPORT DATAFILE=REFFILE
DBMS=CSV
OUT=work.test;
RUN;

PROC CONTENTS DATA=work.test; RUN;
%web_open_table(work.train);;
RUN;

 

 

2. 데이터 전처리

 

데이터 중 Missing 값이 많은 변수, 관측치 대부분이 한가지의 값으로만 있는 변수, 타겟변수와의 상관성이 전은 변수, 변수간의 연관성이 높은 변수, 실제 분석에 사용하기 적절하지 않은 변수 등 분석에 필요하지 않은 변수를 제외하려고 합니다.

 

data work.train_1;
set work.train;
drop street alley utilities condition2 roofmatl bsmtfintype2 bsmtfinsf2 heating lowqualfinsf wooddecksf openporchsf poolarea poolqc miscfeature miscval miscval mosold yrsold;
run;

 

 

3. 모델 구축

 

 

Proc Glmselect를 사용하여 회귀모델을 구축합니다.

연속형 변수만 사용할 수 있는 Proc GLM과는 다르게 Proc Glmselect는 변수 중 범주형 변수가 있을 경우에도 모델 구축이 가능합니다.

그리고 간단한 옵션으로 회귀모델을 변경할 수 있습니다. 간단한 옵션은 Stepwise, Forward, Backward, Lasso등이 있습니다.

 


Proc glmselect data = work.train_1 plots=aseplot;
class bldgtype bsmtcond bsmtexposure bsmtfintype1
bsmtqual centralair condition1 electrical extercond
exterqual exterior1st exterior2nd fence fireplacequ foundation
functional garagecond garagefinish garagequal garagetype
heatingqc housestyle kitchenqual landcontour landslope
lotconfig lotfrontage lotshape mszoning masvnrtype neighborhood
paveddrive roofstyle salecondition saletype;


model saleprice =
bedroomabvgr bldgtype bsmtcond bsmtexposure bsmtfinsf1 bsmtfintype1
bsmtfullbath bsmthalfbath bsmtqual centralair condition1
electrical enclosedporch extercond exterqual exterior1st exterior2nd
fence fireplacequ fireplaces foundation fullbath functional
garagearea garagecars garagecond garagefinish garagequal garagetype garageyrblt
grlivarea halfbath heatingqc housestyle kitchenabvgr kitchenqual
landcontour landslope lotarea lotconfig lotfrontage lotshape
mssubclass mszoning masvnrarea masvnrtype neighborhood
overallcond overallqual paveddrive roofstyle salecondition saletype
screenporch totrmsabvgrd totalbsmtsf yearbuilt yearremodadd _1stFlrSF _2ndFlrSF _3SsnPorch /
selection = stepwise;
store out = house_model;
run;

 

data 부분에서는 train_1을 입력합니다.

plot 부분은 변수별 영향도를 확인하기 위한 옵션입니다.

Class에는 범주형 변수만 입력하고, Model에서는 타겟 변수는 독립변수1, 독립변수2 ,...., 독립변수 n 이렇게 입력하면 됩니다.

변수 입력 후 '/' 다음에 사용하고 싶은 모델을 넣습니다.

Stepwise(단계적 방법)을 사용합니다.

 

+) 설명번수가 많은 데이터의 의미있는 변수를 선택하는 것은 논란의 여지가 많다. 일단, 설명변수를 선택하는 대표적인 방법은 다음의 3가지가 있습니다.

forward selection : 절편만 있는 모델에서 기준 통계치를 가장 많이 개선시키는 변수를 차례로 추가하는 방법

backward selection : 모든 변수가 포함된 모델에서 가장 도움이 되지 않는 변수(p값)를 하나씩 제거하는 방법

stepwise selection : 모든 변수가 포함된 모델에서 출발하고 기준통계치에 가장 도움이 되지 않는 변수를 삭제하거나 모델에서 빠져있는 변수 중에서 기준 통계치를 가장 개선시키는 변수를 추가함. 이러한 변수의 추가 또는 제거를 반복함.

 

store out은 스코어링을 위한 모델을 저장하는 용도로 사용됩니다.

 

1.png

 

 

stepwise 방법을 적용한 결과 총 16개의 변수가 선택되었습니다.

 

 

2.png

 

 

각 변수별 영향도 그래프 입니다.

 

 

3.png

 

모델은 16 step까지 진행되었으며 결과는 다음과 같이 나왔습니다.

 

 

 

4. 회귀모델 

 

proc plm을 사용하여 test데이터에 대한 예측 결과를 출력합니다.

 

proc plm restore=house_model;
score data = work.test out = work.score
pred = predicted lcl= lower ucl = upper;
run;

 

 

test모델은 전처리가 되어 있지 않아 예측값 중 NULL값(.)으로 되어있는 부분이 있습니다.

NULL값을 if문을 활용하여 0으로 변경하고, predict는 saleprice로 이름을 변경합니다.

 


data result_1;
set work.score;
if predicted = . then predicted = 0;
keep id predicted;
rename predicted = saleprice;
run;

 

4.png

 

 result_1의 결과값입니다.

 

Version history
Last update:
‎05-22-2021 06:00 AM
Updated by:
Contributors

SAS Innovate 2025: Register Now

Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!

Article Labels
Article Tags