Działanie algorytmu XGBoost w SPSS Modeler na przykładzie modelu dla kampanii CRM

Start / Blog / Działanie algorytmu XGBoost w SPSS Modeler na przykładzie modelu dla kampanii CRM

W ostatnich tygodniach roku 2018, dla jednego z naszych klientów, mieliśmy przyjemność budować model predykcyjny wybierający najlepszą grupę klientów do kampanii x-sell. Była to dla nas świetna szansa na przetestowanie algorytmu, o którym jest ostatnio bardzo głośno w świecie analityki – Drzew XG Boost.

Czym jest więc algorytm, który w ostatnich miesiącach zawojował platformę Kaggle oraz serca i rozumy analityków? Za dokumentacją SPSS: XGBoost Tree to zaawansowana implementacja algorytmu wzmacniania gradientowego (boosting), który jako model bazowy wykorzystuje model drzewa decyzyjnego. Algorytmy wzmacniania iteracyjnie ucząc się, wyznaczają słabe klasyfikatory i dodają je do ostatecznego silnego klasyfikatora. Dodatkowo, każde kolejne drzewo podobnie jak w metodzie lasów losowych budowane jest w oparciu o wylosowany podzbiór zmiennych i obserwacji.

W wersji 18.1. wprowadzona została do narzędzia IBM SPSS Modeler implementacja algorytmu w języku Python, a w wersji 18.1.1. w Sparku. Uruchomienie algorytmu wymaga zdefiniowania wielu hiperparametrów, przyjrzyjmy się zatem najważniejszym z nich:

Lambda i Alfa są składnikami regularyzacji (odpowiednio L2 – regresja grzbietowa i L1 – regresja Lasso) wag, a ich zwiększanie powoduje, że budowany model staje się bardziej konserwatywny.

W sekcji Parametry wzmocnienia drzewa możemy wskazać Maksymalną głębokość budowanych drzew oraz Minimalną wagę gałęzi (minimalny odsetek obserwacji w liściu). Zwiększenie Maksymalnego kroku przyrostu może być pomocne w sytuacji, gdy mamy do czynienia z mocno niezrównoważonym zbiorem danych wejściowych.

Współczynnik podpróby to nic innego jak odsetek obserwacji użyty do uczenia drzewa. Wartość parametru 0.5 oznacza, że do budowy drzewa wykorzystane zostanie 50% losowo wybranych obserwacji.

Jeden z najważniejszych hiperparametrów modelu XGBoost to Eta, czyli współczynnik uczenia (learning rate). Wynik predykcji modelu powstaje poprzez wymnożenie wyniku każdego kolejno zbudowanego drzewa przez wartość Eta. Przy wysokiej wartości parametru, pierwsze zbudowane drzewo przyjmuje na siebie większą część predykcji. Niska wartość parametru Eta wydłuża proces uczenia- musimy zbudować więcej drzew aby zminimalizować funkcję błędu, w zamian daje stabilniejsze wyniki. Wartość Eta wybieramy z przedziału [0;1].

Parametr Gamma określa minimalną redukcję straty potrzebną do dalszego podziału liścia. Wartość parametru wybieramy z przedziału [0;+∞).

Parametry Podpróba kolumnowa dla drzewa i Podpróba kolumnowa dla poziomu to odsetek predyktorów użytych odpowiednio do budowy każdego drzewa i dla każdego podziału gałęzi na każdym poziomie.

Dodatkowo, warto zwrócić uwagę na opcję Skala wag dodatnich, która jest przydatna przy budowie modelu na niezrównoważonym zbiorze danych. Określa ona stosunek liczby obserwacji z klasą negatywną do liczby obserwacji z klasą pozytywną.

W pierwszej kolejności uruchomiliśmy proces budowy modelu w oparciu o ustawienia domyślne. Już na tym etapie wyniki okazały się bardzo obiecujące. Poniżej wykres krzywej Lift na zbiorze testowym i walidacyjnym dla zbudowanego modelu:

Poniżej ten sam wykres dla modelu zbudowanego z użyciem algorytmu lasów losowych:

oraz dla najlepszej, względem Liftu na 5%, sieci neuronowej:

Zachęceni takimi wynikami zaczęliśmy zmieniać ustawienia domyślne hiperparametrów. Po zmianie wartości współczynnika eta, maksymalnej głębokości drzew, podpróby kolumnowej dla drzew oraz podpróby kolumnowej dla poziomu udało nam się zarówno poprawić stabilność modelu jak i zwiększyć odsetek True Positive.Podsumowując, nasze pierwsze wrażenia z użycia algorytmu XGBoost są bardzo pozytywne. W krótkim czasie, udało nam się zbudować stabilne modele o wyższym Lifcie i wyższym odsetku True Positive, niż przy użyciu pozostałych algorytmów

****Do porównania wykresów krzywych Lift na zbiorach Testowym i Walidacyjnym wykorzystaliśmy nasz autorski węzeł Algo-Lift.