Buduję interaktywne narzędzie prognostyczne (w języku python) jako pomoc w prognozowaniu wykonywanym w mojej organizacji. Do tej pory proces prognozowania był w dużej mierze sterowany przez człowieka, a prognostycy asymilowali dane w swoich naturalnych sieciach neuronowych i wykorzystując swoje wyuczone wyczucie jelit do dokonywania prognoz. Z przeprowadzonej przeze mnie długoterminowej weryfikacji prognozy i badania modelowania predykcyjnego znalazłem, czego możesz się spodziewać; różni prognostycy wykazują różne uprzedzenia, efekty niektórych predyktorów wydają się zawyżone, a inne ważne wydają się być ignorowane, a na ogół wyniki prognozy są mierne w porównaniu ze stosunkowo prostymi modelami empirycznymi.
Prognozy będą nadal ręczne, ale staram się zbudować przydatne narzędzie, aby zapewnić prognostykom lepszą kwantyfikację względnych efektów predyktorów. Istnieją również ważne efekty, takie jak wpływy sezonowe, które są często pomijane, a ja chciałbym, aby narzędzie wyróżniło użytkownika. Oczekuję odejścia i sceptycyzmu co do procesu modelowania od niektórych bardziej „doświadczonych” prognostów (z których wielu ma niewielką formalną wiedzę statystyczną), więc komunikacja jest co najmniej tak samo ważna, a sama wydajność modelu pod względem osiągnięcie wymiernej poprawy dokładności prognoz.
Modele, które opracowuję, mają silną składową auto-regresyjną, która czasami jest znacząco modyfikowana przez zdarzenia, które pokazują się jako zmierzone wartości w niektórych predyktorach, które w czasach braku zdarzeń są bliskie zeru. Jest to zgodne z modelem mentalnym stosowanym przez prognozy. Kluczową częścią jest możliwość wykazania, który z pomiarów „zdarzenia” ma największy wpływ na odepchnięcie prognozy od wartości autoregresji dla danej prognozy. Obrazuję ten proces w ten sposób; Forecaster określa swoją najlepszą wartość domyślną, model sugeruje inną, a Forecaster pyta, dlaczego. Model odpowiada mniej więcej tak: „patrz tutaj, ta wartość tego predyktora zwiększa wartość prognozy w lecie. Gdyby to była zima, poruszałaby się w drugą stronę. Wiem, że istnieją inne pomiary,
Teraz wyobraź sobie, że model był prostą regresją liniową. Można sobie wyobrazić wyświetlanie względnego „efektu” predyktorów opartych na zdarzeniach poprzez pomnożenie wartości przez współczynnik efektywności modelu i wyświetlenie w postaci prostego wykresu słupkowego. Wszystkie słupki z różnych predyktorów sumują się do całkowitego odchylenia od wartości AR, a to zwięźle i wyraźnie pokazuje te, które w tym przypadku mają silny wpływ.
Problem polega na tym, że prognozowany proces wykazuje wysoki stopień nieliniowości w predyktorach, a przynajmniej miałem znacznie większy sukces z czarnymi skrzynkowymi nieliniowymi algorytmami uczenia maszynowego (losowy las i GBM) niż z GLM dla ten zestaw danych. Idealnie chciałbym móc bezproblemowo zmieniać model działający „pod maską” bez zmiany doświadczenia użytkownika, więc potrzebuję jakiegoś ogólnego sposobu pokazania w prosty sposób znaczenia różnych pomiarów bez korzystania z określonego algorytmu. Moje obecne podejście będzie polegało na quasi-linearyzacji efektów poprzez ustawienie wszystkich wartości na zero, z wyjątkiem jednego predyktora, zarejestrowanie przewidywanego odchylenia, a następnie powtórzenie dla wszystkich predyktorów, wyświetlając wyniki na powyższym wykresie słupkowym. W przypadku silnej nieliniowości może to nie działać tak dobrze.
źródło
Odpowiedzi:
Jednym ze sposobów oceny wpływu predyktora na prognozy jest oszacowanie gradientu wyniku w stosunku do predyktorów. Można tego dokonać poprzez oszacowanie częściowych pochodnych nieliniowej funkcji predykcyjnej w odniesieniu do każdego z predyktorów na podstawie różnic skończonych.
Idealnie zrobisz to na rzeczywiście zaobserwowanych danych wejściowych testu. Na przykład możesz uśrednić wartości bezwzględne szacowanych gradientów na wszystkich wejściach testowych w ciągu ostatnich 2 dni. Wielkość tego średniego gradientu można wykorzystać do sortowania ważności predyktorów. (Musisz zachować ostrożność przy szacowaniu gradientu, aby użyć odpowiednich jednostek metodą punktacji Z lub innej takiej metody.) Możesz zapisać te szacowane gradienty według sezonu do analizy porównawczej.
Patrz „ Jak wyjaśnić indywidualne decyzje dotyczące klasyfikacji”, David Baehrens i in. glin. w JMLR, aby uzyskać więcej na ten temat. Artykuł dotyczy klasyfikacji, ale łatwo uogólnia ją również na regresję.
źródło
Czy wypróbowałeś moduł scikit-learn w Pythonie.
Możesz „komputer_importance” dla funkcji jego randomForestClassifier
źródło