SASSTATHW3LOGIT (811385)
Текст из файла
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
-
Перед началом работы полезно «познакомиться» с данными. В SAS Enterprise Guide для этого может подойти задача (task) Characterize Data (Tasks Describe Characterize Data…) – простой способ построить базовые статистики для интервальных переменных и гистограммы для категориальных, посмотреть наличие пропущенных значений.
ОТВЕТ НЕ НУЖЕН – ПРОСТО ПОПРОБУЙТЕ И УЗНАЙТЕ, ЧТО МОЖНО И ТАК.
-
Для «честной» проверки качества моделей и их обобщающей способности разделить данные на два набора: 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; |
-
Некоторые переменные имеют пропущенные значения – нужно их заменить.
[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; |
-
Рассмотреть методы кодирования категориальных переменных в PROC LOGISTIC (см. тут). Использовать их для нескольких любых переменных, кроме Branch.
Использую expb: proc logistic data=train1; class dda pos; model ins= dda pos dda*pos/ expb; run; В итоге — закодированные переменные dda и pos:
|
-
Рассмотреть пример (см. 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;
Получили пять кластеров:
|
-
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). Ожидается, что группировка поможет нам побороть нелинейность (заодно повысить устойчивость модели). Если нужно, провести подходящие преобразования переменных.
Для сгруппированных — такой:
Как и предполагалось, группировка практически поборола нелинейность. |
-
Выбрать 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. |
-
Сравнить модели используя 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-кривой, тем точнее модель. Получаем, что самой точной является третья модель. Наиболее устойчивой является вторая модель.
|
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.