BookmarkSubscribeRSS Feed

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

Started ‎04-28-2021 by
Modified ‎04-28-2021 by
Views 4,449

 

 

이번 게시글은 ' [ SAS 활용 노하우 ] 데이터 분석 1-1' 의 이어지는 글 입니다.

 

 

5. 기초 통계량 분석

 

-1) 기초 통계량 분석하기

 

Proc Means를 통해 각 변수들의 기초 통계량을 확인 할 수 있습니다.

확인하고 싶은 통계량을 추가로 입력할 수 있습니다.

 

proc means data = work.import1 N Nmiss mean std min p1 p5 p10 p25 p50 p75 p90 p95 p99 max;

run;

 

대부분의 변수들이 결측값이 없고, Age만 결측값이 존재하는 등 기초 통계량을 확인할 수 있습니다.

 

스크린샷_2021-04-28_오전_2.23.51.png

 

- 2) 그룹별 통계량 

 

그룹별 통계량을 확인하고 싶으면 Class문을 추가하면 되고 다음과 같이 실행하면 됩니다.

 

proc means data = work.import1 N Nmiss mean std min p1 p5 p10 p25 p50 p75 p90 p95 p99 max;
class survived;
run;

 

스크린샷_2021-04-28_오전_2.23.51 (1).png

 

 

- 3) 빈도 확인하기

 

모델을 만들기 전에 타겟에 대한 빈도를 확인함으로 어떤 값을 넣었을 떄 모델이 잘 적합이 될지 판단을 해보고, 변수에 어떤 값들이 있는지 확인 할 수 있습니다.

 

title "Frequency tables for categorical variables in the training set";
proc freq data = work.import1 nlevels;
tables Survived;
tables Sex;
tables Pclass;
tables SibSp;
tables Parch;
tables Embarked;
tables Cabin;
run;

 

 스크린샷_2021-04-28_오전_2.34.33.png

 

Age, Embarked, Cabin 등에서 결측값을 확인할 수 있습니다. 

이 결측값을 가진 값에 대해 제거할 수도 있고, 평균값 같은 대체값으로 대신 채워넣을 수 있습니다.

 

 

6. 모델 구축

 

- 1) 분석데이터 구축 : 데이터 채워넣기 : Age 변수

 

모델을 구축하기 위해서 빈도 분석시에 발견했던 결측값들을 먼저 채워넣어야 합니다.

결측값을 어떻게 처리하냐에 따라 결과가 달라질 수 있습니다.

 

데이터 전처리시 주의해야 할 주의사항은 원 데이터가 변형될 수 있으므로 원데이터는 보존해야 합니다.

if문을 이용해 결측값을 가진 변수 중 Age에 대해 값을 채우고자 합니다.

타겟 클래스에 대한 나이에 대한 평균값을 대체합니다.

 

 

proc tabulate data = work.import1;
class Pclass;
var Age;
table Pclass*age*mean;
run;

스크린샷_2021-04-28_오전_2.47.08.png

 

 

Pclass(티겟의 승선권 클래스 ( 1 = 1등석, 2 = 2등석 , 3 = 3등석 ))나이대별로 평균을 구합니다.

 

평균값은 소수점으로 나오지만 실제 나이는 소수점이 없으므로 반올림을 적용합니다.

1등석의 평균 나이는 38세, 2등석의 평균 나이는 30세, 3등석의 평균 나이는 25입니다.

 

티켓 등급은 연력대별로 나눠진 것으로 예측할 있습니다.

 

data work.import2;
set work.import1;
if age = '.' and Pclass = 1 then age = 38;
else if age = '.' and Pclass = 2 then age = 30;
else if age = '.' and Pclass = 3 then age = 25;
run;

 

새로운 데이터 셋 work.import2가 만들어졌습니다. 이러한 전처리로 Test 셋에도 동일한 과정을 적용해야 합니다.

 

proc means data = work.import2 N Nmiss;
run;

 

proc means를 통해서 Age의 결측값이 잘 대체되었는지 확인할 수 있습니다.

 

스크린샷_2021-04-28_오전_3.00.18.png

 

 

- 2) 분석데이터 구축 : 데이터 채워넣기 : Embarked 변수

 

Embarked 변수는 '승선한 항'을 나타내는 변수로 결측치는 2개 입니다.

가장 많이 나타나는 S로 채워 넣도록 합니다.

 

data work.import2;
set work.import2;
if Embarked='' then Embarked='S';
run;

proc freq data = work.import2 nlevels;
tables Embarked;
run;

 

스크린샷_2021-04-28_오전_3.07.25 (1).png

 

기존의 2개의 결측치가 대체된 것을 볼 수 있습니다.

 

7. Baseline 모델 구축하기 - 로지스틱 회귀모형

 

모델을 구축하기 위한 전처리가 완료되었습니다. 베이스라인 모델은 로지스틱 회귀모형이고 타겟변수가 두가지 값으로 되어있을 때 ( 이진형 ) 가장 기본적으로 사용되는 분류/예측 모형입니다.

여기서 Baseline모델이란 기준이 되는 모델로 사용하기 위해서 성능의 기준이 되는 모델을 의미합니다.

Class에 사용할 변수들을 모두 넣고 model에는 타겟변수 = 목적변수1 목적변수2 목적변수3.... 같이 작성합니다.

Selection에는 stepwise를 사용합니다.

forward방법과 backward방법의 문제점을 개선한 방법으로 변수를 추가하고 제거하는 과정을 반복하여 최종 모형을 선택하는 방법입니다.

store에는 train_logistic이라는 이름으로 모델을 저장합니다. 이후에 테스트 데이터를 검증하고 예측값을 확인하기 위한 Proc PLM을 사용하려면 Store을 꼭 사용합니다.

이번 모델에는 Cabin, Name, PasengerID, Ticket 변수는 제외한 모델입니다.

 

 

proc logistic data = work.import2;

class Embarked Parch Pclass Sex SibSp Survived;

model Survived(event='1') = Age Fare Embarked Parch Pclass Sex SibSp /

selection= stepwise expb stb lackfit;

output out = temp p=new;

store train_logistic;

run;

 

스크린샷_2021-04-28_오후_5.27.30.png

 

 

stepwise 방식에 따라 변수를 넣었다가 빼는 작업을 반복하였습니다.

step0부터 step4까지 실행되었습니다.

 

스크린샷_2021-04-28_오후_5.28.09.png

 

분석에 사용되는 변수는 Sex , Pclass, Age, SibSp이고, 모두 유의수준 0.05이하로 모델에 사용하기 적절합니다.

 

8. Test데이터 불러오기

 

test 데이터는 타겟변수가 존재하지 않으므로 기존 train데이터에서 타겟을 제외한 11개의 변수가 있는 것을 확인할 수 있습니다.

 

 


FILENAME REFFILE '/folders/myfolders/sasuser.v94/test.csv';
PROC IMPORT DATAFILE=REFFILE

DBMS=CSV

OUT=WORK.IMPORT3;

RUN;

test 데이터를 work.import3로 불러왔습니다.

 

- 1) 모델 적합

Proc plm을 사용하여 앞에서 만들었던 모델을 테스트 데이터에 적합할 수 있습니다.

 

proc plm source=train_logistic;
score data = work.import1 out = work.import3_scored predicted = p / ilink;
run;

먼저 train_logistic 을 source로 합니다.

score data에는 검증 데이터인 work.import1로 지정하고 out으로는 work.import3_scored로 지정합니다.

 

스크린샷_2021-04-28_오후_5.56.08.png

 

결과를 보면 다음과 같이 적합된 것을 확인 있습니다.

 

 

Version history
Last update:
‎04-28-2021 05:03 AM
Updated by:
Contributors

sas-innovate-wordmark-2025-midnight.png

Register Today!

Join us for SAS Innovate 2025, our biggest and most exciting global event of the year, in Orlando, FL, from May 6-9. Sign up by March 14 for just $795.


Register now!

Article Labels
Article Tags