Przedstawiony raport był jednym z zadań zaliczeniowych na studia inżynierskie na kierunku Matematyka Stosowana o specjalizacji Analiza Danych.
Pełny raport można znaleźć tutaj.
Model klasyfikacyjny Perceptron wielowarstwowy (MLP) został stworzony w programie IBM SPSS Statistic,
wykorzystałam plik churn_pl.txt, w którym zmienną celu była Churn.
Ad.1. Jako ziarno generatora liczb losowych ustawiłam swój numer indeksu (293870).
Podzieliłam dane losowo na zbiory uczący, testowy i walidacyjny, gdyż model budowany przeze mnie wymaga
podziału. Powstały nowe zmienne podziału: uczący, walidacyjny i testowy oraz modelu MLP MLP_Predicted_Value,
MLP_PseudoProbability_1 i MLP_PseudoProbability_2.
Kod:
PRESERVE.
SET DECIMAL COMMA.
GET DATA /TYPE=TXT
/FILE=”C:\Users\Lenovo\Desktop\churn_pl_przecinek.txt”
/DELCASE=LINE
/DELIMITERS=”;”
/ARRANGEMENT=DELIMITED
/FIRSTCASE=2
/DATATYPEMIN PERCENTAGE=95.0
/VARIABLES=
Stan AUTO
Czaswspółpracy AUTO
Kod AUTO
Telefon AUTO
Planmiędzynarodowy AUTO
Pocztagłosowa AUTO
Liczbawiadomości AUTO
Dzieńminuty AUTO
Dzieńrozmowy AUTO
Dzieńopłata AUTO
Wieczórminuty AUTO
Wieczórrozmowy AUTO
Wieczóropłata AUTO
Nocminuty AUTO
Nocrozmowy AUTO
Nocopłata AUTO
Międzynarodoweminuty AUTO
Międzynarodowerozmowy AUTO
Międzynarodoweopłata AUTO
LiczbarozmówzBOK AUTO
Churn AUTO
/MAP.
RESTORE.
CACHE.
EXECUTE.
Data written to the working file.
21 variables and 3333 cases written.
Variable: Stan Type: String Format : A2
Variable: Czaswspółpracy Type: Number Format : F3
Variable: Kod Type: Number Format : F3
Variable: Telefon Type: String Format : A8
Variable: Planmiędzynarodowy Type: String Format : A3
Variable: Pocztagłosowa Type: String Format : A3
Variable: Liczbawiadomości Type: Number Format : F2
Variable: Dzieńminuty Type: Number Format : F10.6
Variable: Dzieńrozmowy Type: Number Format : F3
Variable: Dzieńopłata Type: Number Format : F9.6
Variable: Wieczórminuty Type: Number Format : F10.6
Variable: Wieczórrozmowy Type: Number Format : F3
Variable: Wieczóropłata Type: Number Format : F9.6
Raport 2. Dziekanowska Lidia
Variable: Nocminuty Type: Number Format : F10.6
Variable: Nocrozmowy Type: Number Format : F3
Variable: Nocopłata Type: Number Format : F9.6
Variable: Międzynarodoweminuty Type: Number Format : F9.6
Variable: Międzynarodowerozmowy Type: Number Format : F2
Variable: Międzynarodoweopłata Type: Number Format : F8.6
Variable: LiczbarozmówzBOK Type: Number Format : F1
Variable: Churn Type: String Format : A6
Predyktorami w tworzonym modelu będą zmienne niezależne – w związku z tym musiałam odrzucić zmienne Dzień opłata, Wieczór opłata, Noc opłata, Międzynarodowe opłata, które są mocno skorelowane ze zmiennymi (odpowiednio) Dzień minuty, Wieczór minuty, Noc minuty, Międzynarodowe minuty. Zmienne Stan, Kod oraz Telefon nie były brane pod uwagę podczas tworzenia modelu ze względu na brak zależności ze względu na zmienną Churn.
Kod do utworzenia zmiennej podzial:
SET RNG=MT MTINDEX=293870.
USE ALL.
do if $casenum=1.
compute #s_$_1=1999.
compute #s_$_2=3333.
end if.
do if #s_$_2 > 0.
compute filter_$=uniform(1)* #s_$_2 < #s_$_1.
compute #s_$_1=#s_$_1 – filter_$.
compute #s_$_2=#s_$_2 – 1.
else.
compute filter_$=0.
end if.
VARIABLE LABELS filter_$ '1999 z pierwszych 3333 obserwacji (SAMPLE)’.
FORMATS filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE.
RENAME VARIABLES filter_$=uczacy.
VARIABLE LABELS uczacy 'Zbior uczacy’.
SORT CASES BY uczacy(A).
SET RNG=MT MTINDEX=293870.
USE ALL.
do if $casenum=1.
compute #s_$_1=667.
compute #s_$_2=1334.
end if.
do if #s_$_2 > 0.
compute filter_$=uniform(1)* #s_$_2 < #s_$_1.
compute #s_$_1=#s_$_1 – filter_$.
compute #s_$_2=#s_$_2 – 1.
else.
compute filter_$=0.
end if.
VARIABLE LABELS filter_$ '667 z pierwszych 1334 obserwacji (SAMPLE)’.
FORMATS filter_$ (f1.0).
FILTER BY filter_$.
EXECUTE.
RENAME VARIABLES filter_$=walidacyjny.
VARIABLE LABELS walidacyjny 'Ocena jakosci modelu’.
COMPUTE podzial=uczacy – walidacyjny.
EXECUTE.
FORMATS podzial(F1.0).
VARIABLE LEVEL podzial(NOMINAL).
VALUE LABELS podzial
1 'zbior uczacy’
0 'zbior testowy – zatrzymanie sieci’
-1 'zbior walidacyjny – ocena modelu’.
FILTER OFF.
USE ALL.
EXECUTE.
Metodą wybraną przeze mnie jest perceptron wielowarstwowy (MLP) , za pomocą której zbudowałam model klasyfikujący obserwacje ze względu na wartość zmiennej Churn.
Kod do utworzenia sieci neuronowej MLP:
SET RNG=MT MTINDEX=293870.
*Multilayer Perceptron Network.
MLP Churn (MLEVEL=N) BY Planmiędzynarodowy Pocztagłosowa LiczbarozmówzBOK WITH Dzieńminuty
Dzieńrozmowy Wieczórminuty Wieczórrozmowy Nocminuty Nocrozmowy Międzynarodoweminuty
Międzynarodowerozmowy Czaswspółpracy Liczbawiadomości
/RESCALE COVARIATE=ADJNORMALIZED
/PARTITION VARIABLE=podzial
/ARCHITECTURE AUTOMATIC=YES (MINUNITS=1 MAXUNITS=50)
/CRITERIA TRAINING=BATCH OPTIMIZATION=SCALEDCONJUGATE LAMBDAINITIAL=0.0000005
SIGMAINITIAL=0.00005 INTERVALCENTER=0 INTERVALOFFSET=0.5 MEMSIZE=4000
/PRINT CPS NETWORKINFO SUMMARY CLASSIFICATION SOLUTION IMPORTANCE
/PLOT NETWORK ROC
/SAVE PREDVAL PSEUDOPROB
/OUTFILE MODEL=’C:\Users\Lenovo\Desktop\mlp_2.xml’
/STOPPINGRULES ERRORSTEPS= 1 (DATA=AUTO) TRAININGTIMER=ON (MAXTIME=15) MAXEPOCHS=AUTO
ERRORCHANGE=1.0E-4 ERRORRATIO=0.001
/MISSING USERMISSING=INCLUDE .
Wyniki:
Zmienna Próba została utworzona poprzez zdefiniowanie zmiennych Uczący, Testowy i Walidacyjny. Kod do ich utworzenia został przedstawiony powyżej w Ad.2. Obserwacje zostały podzielone na grupy 60% obserwacji do próby uczącej oraz po 20% do zbiorów walidacyjnego i testującego. Żadna z obserwacji nie została wykluczona z analizy.
Czynnikami w modelu MLP są zmienne Planmiędzynarodowy, Pocztagłosowa i LiczbarozmówzBOK, a współzmiennymi Dzieńminuty, Dzieńrozmowy, Wieczórminuty, Wieczórrozmowy, Nocminuty, Nocrozmowy, Międzynarodoweminuty, Międzynarodowerozmowy, Czaswspółpracy oraz Liczbawiadomości. W warstwie ukrytej, która jest jedna, zostało 4 neuronów, a w wynikowej 2 neurony.
Dlaczego tylko jedna warstwa?
Aby przeprowadzić odwzorowanie nieliniowe potrzebna jest przynajmniej jedna ukryta warstwa neuronów. Liczba neuronów w sieci powinna zależeć od złożoności modelowanego systemu. Topologia wielowarstwowa jest poprawna, jednak formalnie nie ma potrzeby rozbudowywać sieci ponad jedną warstwę ukrytą. W praktyce nie ma żadnych korzyści z zastosowania więcej niż jednej warstwy ukrytej, a nawet wręcz przeciwnie (Tadeusiewicz, 1993).
Poniższy wykres nie jest czytelny (niewyraźne podpisy), dla jego lepszej czytelności należałoby podzielić go na kilka osobnych obrazów, przez co jednak straciłby na innego rodzaju czytelności (w znaczeniu możliwości porównania zmiennych przechodzących przez węzły).
Po lewej stronie znajdują się kolejno: Błąd obciążony, Planmiędzynarodowy*nie, Planmiędzynarodowy*tak, Pocztagłosowa*nie, Pocztagłosowa*tak, LiczbarozmowzBOK=0, LiczbarozmowzBOK=1, LiczbarozmowzBOK=2, LiczbarozmowzBOK=3, LiczbarozmowzBOK=4, LiczbarozmowzBOK=5, LiczbarozmowzBOK=6, LiczbarozmowzBOK=7, LiczbarozmowzBOK=9, Dzieńminuty, Dzieńrozmowy, Wieczórminuty, Wieczórrozmowy, Nocminuty, Nocrozmowy, Międzynarodoweminuty, Międzynarodowerozmowy, Czaswspółpracy, Liczbawiadomości.
W środku: Błąd obciążony, H(1:2), H(1:3), H(1:4), H(1:5). Po prawej stronie znajdują się: Churn=Fałsz i Churn=Prawda.
Podsumowując, procent niepoprawnych odpowiedzi nie przekracza 8%, nie jest on jednak najmniejszy, co znaczy, że model będzie się czasem mylić.
Interpretacja tabeli polega na wybraniu zmiennych o wartościach mniejszych lub większych od 0
– dla mniejszych od 0 wartości zmienne łączą się ze sobą (kolor niebieski na grafie) w warstwie wejściowej i ukrytej oraz ukrytej i wynikowej,
– dla wartości wagi synaptycznych większych od 0 (przedstawionych graficznie w kolorze szarym).
Procent poprawnych odpowiedzi ogółem uzyskał ponad 92%. Dla wszystkich prób procent poprawnie przewidzianych odpowiedzi Prawda->Prawda uzyskał tylko ok 58% – 66% , co wskazuje nam na nie najlepszą czułość przedstawionego modelu. Specyficzność została przewidziana bardzo dobrze – na poziomie ponad 96%.
Z tabeli możemy wyczytać:
a) Zbiór uczący:
Trafność = 92.5%
Czułość = 66.4%
Specyficzność = 97.1%
Prawdopodobieństwo = 1 – 100/(100+1652) = 94.3%
b) Zbiór testowy:
Trafność= 92.5%
Czułość = 64.8%
Specyficzność = 96.9%
Prawdopodobieństwo = 94.6%
c) Zbiór walidacyjny:
Trafność = 92.1%
Czułość = 58.5%
Specyficzność = 97.6%
Prawdopodobieństwo = 93.5%
Aby zwiększyć czułość należałoby zwiększyć próg przy prawdopodobieństwie.
Analizując wykres krzywej ROC, obie krzywe (Prawda i Fałsz) znajdują się znacznie ponad prostą x=y, co oznacza, że przeprowadzona klasyfikacja jest lepsza niż losowy podział.
Pole pod krzywymi zarówno czerwoną i niebieską wynosi 0.921 (jest bliskie 1), co znaczy, że dość dokładnie powinniśmy zaklasyfikować obiekty do grup.
Powyższa tabelka przedstawia ważności zmiennej niezależnej. Za jej pomocą możemy wybrać zmienne, które w największym stopniu wpływają na zmienną Churn, są to przede wszystkim:
* Dzieńminuty 100.0%
* LiczbarozmówzBOK 79.6%
* Wieczórminuty 55.4%
*Międzynarodowerozmowy 51.2%
Wykres znormalizowanej ważności obrazuje tabelkę ważności zmiennej niezależnej, dzięki któremu możemy łatwiejzauważyć wielkość różnic pomiędzy zmiennymi. Możemy stwierdzić, że nie ma oczywistych związków zmiennej Churn ze zmiennymi Nocrozmowy, Wieczórrozmowy, Czaswspółpracy, Liczbawiadomości, Dzieńrozmowy, Nocminuty, Międzynarodoweminuty, (ważność na poziomnie mniejszym niż .09). Biorąc pod uwagę wyniki poprzedniej analizy (Raport 1) ciężko jest jednoznacznie stwierdzić czy zmienne Pocztagłosowa i Planmiędzynarodowy rzeczywiście mają widoczny wpływ na zmienną Churn.
Do narysowania krzywej ROC należy podzielić obserwacje ze względu na zmienną podział
SORT CASES BY podzial.
SPLIT FILE SEPARATE BY podzial.
W ten sposób utworzone zostaną 3 wykresy krzywej ROC dla wartości zmiennej Churn równej Fałsz (walidacyjny, testowy i uczący), oraz 3 dla wartości zmiennej Churn równej Prawda.
CHURN = FAŁSZ
ROC MLP_PseudoProbability_1 BY Churn (’Fałsz’)
/PLOT=CURVE(REFERENCE)
/PRINT=SE COORDINATES
/CRITERIA=CUTOFF(INCLUDE) TESTPOS(LARGE) DISTRIBUTION(FREE) CI(95)
/MISSING=EXCLUDE.
Podział = Zbiór walidacyjny
Podział = Zbiór testowy – zatrzymanie sieci
Podział = Zbiór uczący
CHURN = PRAWDA
ROC MLP_PseudoProbability_2 BY Churn (’Prawda’)
/PLOT=CURVE(REFERENCE)
/PRINT=SE COORDINATES
/CRITERIA=CUTOFF(INCLUDE) TESTPOS(LARGE) DISTRIBUTION(FREE) CI(95)
/MISSING=EXCLUDE.
Podział = Zbiór walidacyjny – ocena modelu
Podział = Zbiór testowy – zatrzymanie sieci
Podział = Zbiór uczący
Zestawienie pól pod krzywymi
Porównanie Podsumowując powyższe wykresy krzywej ROC , powierzchnia wszystkich krzywych jest istotnie większa od prostej x=y, gdyż jest ona na poziomie ponad 90% co utwierdza tezę, że model dobrze działa a wartości nie są przewidywane losowo. Aby poprawić go tak, by przewidywane wartości były jeszcze bliższe 100% rzeczywistych wartości zmiennej churn, należałoby nieznacznie zmienić próg decyzyjny.
Podsumowując analizę zmiennej Churn dokonanej za pomocą modelu sieci neuronowych MLP możemy spostrzec, że:
a) Cztery zmienne związane z opłatami są zależne od zmiennych związanych z minutami, więc powinny zostać pominięte, natomiast zmienne Stan, Kod i Telefon nie nadają się do analizy ze względu na brak powiązań ze zmienną Churn
b) Wykorzystanie zmiennej LiczbarozmówzBOK jako czynnika znacznie powiększyło warstwę wejściową, przez co zrobiło ją mniej czytelną, za to poprawiła wyniki zmniejszając procent niepoprawnych odpowiedzi.
c) Procent niepoprawnych odpowiedzi wynosi poniżej 8% i dotyczy głównie nieprawidłowego przewidywania prawdy. Może to wynikać ze żle dobranych losowo danych do zbioru uczącego lub po prostu złym zbiorem danych – z bardzo małą ilością obserwacji zmiennej Churn o wartości Prawda (dotyczą zaledwie kilkunastu procent wszystkich obserwacji)
d) Przewidywane wartośći charakteryzują się bardzo dobrą trafnością i specyficznością na poziomie ponad 90% oraz średnią czułością ok. 60%. By zwiększyć czułość należałoby zmienić punkt decyzyjny.
e) Pole pod krzywą ROC zajmuje ponad 90% co udowadnia, że przewidywane wartości nie były losowe.
f) Na Churn największy wpływ miały zmienne Dzieńminuty, LiczbarozmówzBOK oraz Wieczórminuty. Pozostałe zmienne nie wydają się szczególnie wpływać na Churn.
Przedstawiony model perceptronu wielowarstwowego (MLP) przewiduje prawidłowo na poziomie ok. 90%, dla jego poprawy należałoby dodać więcej obserwacji z Churn o wartości Prawda. By klientów rezygnujących z firmy było mniej należałoby rozszerzyć bądź uatrakcyjnić pakiet rozmów dziennych i wieczornych, które mają największy wpływ na decyzję klientów oraz poprawić jakość rozmów z Biurem Obsługi Klienta.