SASSTATHW3LOGIT (SAS-5task)

Документ SASSTATHW3LOGIT (SAS-5task), который располагается в категории "курсовые/домашние работы" в предмете "(ппп соиад) (sas) пакеты прикладных программ для статистической обработки и анализа данных" издесятого семестра. SASSTATHW3LOGIT (SAS-5task) - СтудИзба 2020-08-25 СтудИзба

Описание файла

Файл "SASSTATHW3LOGIT" внутри архива находится в папке "STATHW3_Kazachuk". Документ из архива "SAS-5task", который расположен в категории "курсовые/домашние работы". Всё это находится в предмете "(ппп соиад) (sas) пакеты прикладных программ для статистической обработки и анализа данных" из десятого семестра, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "SASSTATHW3LOGIT"

Текст из документа "SASSTATHW3LOGIT"

9

SAS/STAT. HOME WORK 3. LOGIT

ФИО

Казачук Мария Андреевна



DATA

Набор данных Develop – информация о клиентах банка и факте покупки страхового продукта – этот факт мы будем прогнозировать.

Variable

Label

ATM

ATM

ATMAmt

ATM Withdrawal Amount

AcctAge

Age of Oldest Account

Age

Age

Branch

Branch of Bank

CC

Credit Card

CCBal

Credit Card Balance

CCPurc

Credit Card Purchases

CD

Certificate of Deposit

CDBal

CD Balance

CRScore

Credit Score

CashBk

Number Cash Back

Checks

Number of Checks

DDA

Checking Account

DDABal

Checking Balance

Dep

Checking Deposits

DepAmt

Amount Deposited

DirDep

Direct Deposit

HMOwn

Owns Home

HMVal

Home Value

ILS

Installment Loan

ILSBal

Loan Balance

IRA

Retirement Account

IRABal

IRA Balance

InArea

Local Address

Income

Income

Ins

TARGET 

Inv

Investment

InvBal

Investment Balance

LOC

Line of Credit

LOCBal

Line of Credit Balance

LORes

Length of Residence

MM

Money Market

MMBal

Money Market Balance

MMCred

Money Market Credits

MTG

Mortgage

MTGBal

Mortgage Balance

Moved

Recent Address Change

NSF

Number Insufficient Fund

NSFAmt

Amount NSF

POS

Number Point of Sale

POSAmt

Amount Point of Sale

Phone

Number Telephone Banking

Res

Area Classification

SDB

Safety Deposit Box

Sav

Saving Account

SavBal

Saving Balance

Teller

Teller Visits



ОТВЕТ

Как обычно, но со следующими особенностями: файл с кодом – полная программа – ответ на все пункты (ХОРОШО КОММЕНТИРОВАННАЯ). Вордовый документ – с картинками, табличками и пр. и ВЫВОДАМИ.

TASKS

  1. Перед началом работы полезно «познакомиться» с данными. В SAS Enterprise Guide для этого может подойти задача (task) Characterize Data (Tasks  Describe  Characterize Data…) – простой способ построить базовые статистики для интервальных переменных и гистограммы для категориальных, посмотреть наличие пропущенных значений.

    ОТВЕТ НЕ НУЖЕН – ПРОСТО ПОПРОБУЙТЕ И УЗНАЙТЕ, ЧТО МОЖНО И ТАК.

  2. Для «честной» проверки качества моделей и их обобщающей способности разделить данные на два набора: TRAIN – 70% наблюдений и VALIDATE – 30% наблюдений (см. пример TRAIN_VAL). Естественно все преобразования нужно проводить над двумя наборами, чтобы они были «идентичны» и, в конечном итоге, модель, построенную на первом, можно было бы применить ко второму (проскорить (score) его), а потом сравнить качество.

data develop;

set mydata.develop;

run;

proc sort data=develop out=develop;

by ins;

run;

proc surveyselect noprint ranuni

data = develop

samprate=.7

out=develop

seed=44444

outall;

strata ins;

run;

data train valid;

set develop;

if selected then output train;

else output valid;

run;



  1. Некоторые переменные имеют пропущенные значения – нужно их заменить.
    [P1] Например на медиану/среднее, не забыв создать индикаторы пропущенных значений (см. ex1_missing_imputation).

data develop1;

set train;

/* name the missing indicator variables */

array mi{*} MIAcctAg MIPhone MIPOS MIPOSAmt

MIInv MIInvBal MICC MICCBal

MICCPurc MIIncome MIHMOwn MILORes

MIHMVal MIAge MICRScor;

/* select variables with missing values */

array x{*} acctage phone pos posamt

inv invbal cc ccbal

ccpurc income hmown lores

hmval age crscore;

do i=1 to dim(mi);

mi{i}=(x{i}=.);

end;

run;

/* Impute missing values with the median */

proc stdize data=develop1

reponly

method=median

out=imputed;

var ATM ATMAmt AcctAge Age CC CCBal CCPurc CD CDBal CRScore CashBk Checks DDA DDABal Dep DepAmt DirDep HMOwn

HMVal ils ILSBal InArea Income ira IRABal ins inv InvBal loc LOCBal LORes mm MMBal MMCred mtg MTGBal Moved

nsf NSFAmt pos POSAmt Phone sdb sav SavBal Teller;

run;

Для набора Valid – аналогично.


[P2] На практике пропущенные значения заменяют наиболее вероятным, т.е. строят модель, предсказывающую что должно стоять на месте пропущенного значения, используя остальные переменные. Попробуйте проделать это для одной из переменных с пропущенными значениями.

data develop3;

set train;

run;

proc stdize data=develop3 reponly method=mean pstat out=train2;

var phone;

by ins;

run;

data develop4;

set valid;

run;

proc stdize data=develop4 reponly method=mean pstat out=valid2;

var phone;

by ins;

run;

Это — для переменной Phone.


[P3] Разбить наблюдения на группы («кластеризовать»), при наличии пропущенного значения, поставить среднее по группе, куда попало наблюдение (см. ex2_missing_imputation).

proc rank data=train out=train3 groups=3;

var ins;

ranks ins;

run;

proc sort data=train3 out=train3;

by ins;

run;

proc stdize data=train3 method=median

reponly out=train3;

by ins;

run;

proc rank data=valid out=valid3 groups=3;

var ins;

ranks ins;

run;

proc sort data=valid3 out=valid3;

by ins;

run;

proc stdize data=valid3 method=median

reponly out=valid3;

by ins;

run;



  1. Рассмотреть методы кодирования категориальных переменных в PROC LOGISTIC (см. тут). Использовать их для нескольких любых переменных, кроме Branch.

Использую expb:

proc logistic data=train1;

class dda pos;

model ins= dda pos dda*pos/ expb;

run;

В итоге — закодированные переменные dda и pos:









  1. Рассмотреть пример (см. ex3_cat_inputs) кодирования переменной Branch методом, описанным на лекции. Применить его.

proc means data=train1 noprint nway;

class branch;

var ins;

output out=level mean=prop;

run;

proc print data=level;

run;

ods output clusterhistory=cluster;

proc cluster data=level method=ward outtree=fortree

plots=(dendrogram(vertical height=rsq));

freq _freq_;

var prop;

id branch;

run;

proc freq data=train1 noprint;

tables branch*ins / chisq;

output out=chi(keep=_pchi_) chisq;

run;

data cutoff;

if _n_ = 1 then set chi;

set cluster;

chisquare=_pchi_*rsquared;

degfree=numberofclusters-1;

logpvalue=logsdf('CHISQ',chisquare,degfree);

run;

proc sgplot data=cutoff;

scatter y=logpvalue x=numberofclusters

/ markerattrs=(color=blue symbol=circlefilled);

xaxis label="Number of Clusters";

yaxis label="Log of P-Value" min=-170 max=-130;

title "Plot of the Log of the P-Value by Number of Clusters";

run;

title;

proc sql;

select NumberOfClusters into :ncl

from cutoff

having logpvalue=min(logpvalue);

quit;

proc tree data=fortree nclusters=&ncl out=clus;

id branch;

run;

proc sort data=clus;

by clusname;

run;

proc print data=clus;

by clusname;

id clusname;

run;

data train1_5;

set train1;

brclus1=(branch in ('B6','B9','B19','B8','B1','B17','B3',

'B5','B13','B12','B4','B10'));

brclus2=(branch='B15');

brclus3=(branch='B16');

brclus4=(branch='B14');

run;



Получили пять кластеров:









































  1. Variable screening & logit plots.
    [P1] Провести первичный одномерный отбор переменных (screening) (см. ex4_screen_spearman_hoef). (Не будьте очень суровы: одномерный есть одномерный – переменная может быть незначимой, но в пересечении с какой-то другой окажется очень полезной.)

По Spearman и Hoeffding наиболее значимыми переменными являются LORes, MicrScor, HMOwn,MllNcome, CRScore, LOC:




































[P2] Обратить внимание на линейность зависимости между переменными и целевой используя logit-графики для оригинальных переменных (см. ex5_logit_plots) и

Для оригинальных переменных получили следующий график:
















[P3] для сгруппированных (binned) (см. ex5_logit_plots). Ожидается, что группировка поможет нам побороть нелинейность (заодно повысить устойчивость модели). Если нужно, провести подходящие преобразования переменных.

Для сгруппированных — такой:







Как и предполагалось, группировка практически поборола нелинейность.



  1. Выбрать 3 модели-кандидата, используя три разных метода и набор TRAIN.

/*stepwise selection*/

proc reg data= train1_5 plots(only)=adjrsq;

FORWARD: model ins=ATM ATMAmt AcctAge Age CC CCBal CCPurc CD CDBal CRScore CashBk Checks DDA DDABal Dep DepAmt DirDep HMOwn

HMVal ils ILSBal InArea Income ira IRABal inv InvBal loc LOCBal LORes mm MMBal MMCred mtg MTGBal Moved

nsf NSFAmt pos POSAmt Phone sdb sav SavBal Teller

/selection=forward;

BACKWARD: model ins=ATM ATMAmt AcctAge Age CC CCBal CCPurc CD CDBal CRScore CashBk Checks DDA DDABal Dep DepAmt DirDep HMOwn

HMVal ils ILSBal InArea Income ira IRABal inv InvBal loc LOCBal LORes mm MMBal MMCred mtg MTGBal Moved

nsf NSFAmt pos POSAmt Phone sdb sav SavBal Teller

/selection=backward;

STEPWISE: model ins=ATM ATMAmt AcctAge Age CC CCBal CCPurc CD CDBal CRScore CashBk Checks DDA DDABal Dep DepAmt DirDep HMOwn

HMVal ils ILSBal InArea Income ira IRABal inv InvBal loc LOCBal LORes mm MMBal MMCred mtg MTGBal Moved

nsf NSFAmt pos POSAmt Phone sdb sav SavBal Teller

/selection=stepwise;

title 'Best Models Using Stepwise Selection';

run;

quit;

При Forward значимыми оказались переменные: CRScore, DirDep, HMVal, LORes, HMOwn, MMBal.





При Backword: HMVal, HMOwn, LORes, CRScore, DepAmt, InArea.







/*all*/

proc reg data=train1_5

plots(only)=(rsquare adjrsq cp);

ALL_REG: model ins=ATM ATMAmt AcctAge Age CC CCBal CCPurc CD CDBal CRScore CashBk Checks DDA DDABal Dep DepAmt DirDep HMOwn

HMVal ils ILSBal InArea Income ira IRABal inv InvBal loc LOCBal LORes mm MMBal MMCred mtg MTGBal Moved

nsf NSFAmt pos POSAmt Phone sdb sav SavBal Teller

/ selection=rsquare

adjrsq cp best=10;

title 'Best Models Using All-Regression Option';

run;

quit;



Наиболее значимыми оказались переменные ATM, ATMAmt, AcctAge, CC, CCBal, CD, CashBk, Checks, DDA, DDABal, Dep, ILS, ILSBal, InAres, Ira, Inv, LOC, LOCBal, MM, MTG, MTGBal, Moved, POS, POSAmt, Phone, SDB Sav, SavBal, Teller.



  1. Сравнить модели используя KS (PROC NPAR1WAY) и ROC (PROC LOGISTIC) на наборах TRAIN и VALIDATE. Выбрать лучшую. Выбрать наиболее «устойчивую» (значения статистик качества на TRAIN и VALIDATE примерно равны) (см. ex6_KS и ex7_ROC_comp).

Модель1:

proc npar1way edf data=train1_5;

class ins;

var CRScore DirDep HMVal LORes HMOwn MMBal;

title "K-S Statistic for the Validation Data Set";

run;

Для данной модели получены следующие результаты прохождения тестов:



























Модель2:

proc npar1way edf data=train1_5;

class ins;

var HMVal HMOwn LORes CRScore DepAmt InArea;

title "K-S Statistic for the Validation Data Set";

run;

Для данной модели получены следующие результаты прохождения тестов:



















Модель3:

proc npar1way edf data=train1_5;

class ins;

var ATM ATMAmt AcctAge CC CCBal CD CashBk Checks DDA DDABal

Dep ILS ILSBal InArea Ira Inv LOC LOCBal MM MTG MTGBal Moved

POS POSAmt Phone SDB Sav SavBal Teller;

title "K-S Statistic for the Validation Data Set";

run;

Здесь тест прошли 10 переменных из 29.

Следовательно, из этих трех моделей на наборе train лучшей является вторая модель.



Теперь рассмотрим набор Validate(аналогично).

Для модели1 тест прошло 3 переменных.

Для модели2 тест прошло 4 переменных.

Для модели3 тест прошло 9 переменных.

Следовательно, наилучшей снова является вторая модель.



Проверим для ROC:

Для данных моделей получаем:



Чем больше площадь под ROC-кривой, тем точнее модель. Получаем, что самой точной является третья модель. Наиболее устойчивой является вторая модель.





































































Свежие статьи
Популярно сейчас