Testy historyczne lub weryfikacja krzyżowa, gdy proces budowania modelu był interaktywny

9

Mam kilka modeli predykcyjnych, których wydajność chciałbym przetestować ponownie (tj. Zabrać mój zestaw danych, „przewinąć” go do poprzedniego momentu i zobaczyć, jak ten model działałby prospektywnie).

Problem polega na tym, że niektóre z moich modeli zostały zbudowane w procesie interaktywnym. Na przykład, zgodnie z zaleceniami Strategii modelowania regresji Franka Harrella , w jednym modelu użyłem ograniczonych sześciennych splajnów, aby obsłużyć możliwe nieliniowe powiązania między cechami a odpowiedzią. Przydzieliłem stopnie swobody każdego splajnu w oparciu o połączenie wiedzy dziedzinowej i jednowymiarowych miar siły asocjacji. Ale stopnie swobody, na które chcę pozwolić mojemu modelowi, oczywiście zależą od wielkości zestawu danych, który różni się dramatycznie podczas testowania wstecznego. Jeśli nie chcę ręcznie wybierać stopni swobody osobno dla każdego testu, w którym model jest testowany, jakie są inne opcje?

Dla innego przykładu, obecnie pracuję nad wykrywaniem wartości odstających poprzez znajdowanie punktów o dużej dźwigni. Gdybym był szczęśliwy, mogąc to zrobić ręcznie, po prostu spojrzałbym na każdy punkt danych o dużej dźwigni, sprawdzał poczytalność, czy dane są czyste, i albo je odfiltrowałem, albo wyczyściłem ręcznie. Ale zależy to od wiedzy z zakresu domen, więc nie wiem, jak zautomatyzować ten proces.

Byłbym wdzięczny za porady i rozwiązania zarówno (a) dotyczące ogólnego problemu automatyzacji interaktywnych części procesu budowania modelu, lub (b) szczegółowe porady dotyczące tych dwóch przypadków. Dzięki!

Ben Kuhn
źródło

Odpowiedzi:

4

Do Twojej wiadomości, może to być bardziej odpowiednie dla SE.DataScience, ale na razie odpowiem tutaj.

Wydaje mi się, że możesz być w sytuacji, w której nie będziesz miał innego wyjścia, jak napisać skrypt, który zaimplementuje twoje rozwiązania. Nigdy nie pracowałem z splajnami, moja wiedza na ich temat jest ściśle teoretyczna, więc proszę o wyrozumiałość i daj mi znać, jeśli czegoś nie widzę.

Ogólnie rzecz biorąc, wydaje się, że masz kilka różnych przedmiotów, które musisz rozwiązać, aby to zaimplementować.

1.) Określanie parametrów modelu w sposób dynamiczny. Wcześniej wspomniałeś, że używałeś kombinacji wiedzy o domenach i mierników jednowymiarowych. To wydaje mi się czymś, z czym powinieneś sobie poradzić heurystycznie. Na początku będziesz musiał uzgodnić zestaw zasad, które Twój program wdroży. To może, ale nie musi być trywialne zadanie, ponieważ będziesz musiał przemyśleć, jakie są potencjalne implikacje tych reguł. Może to wymagać ponownej wizyty na każdym etapie procesu i skatalogowania nie tylko decyzji, ale także ich uzasadnienia.

2.) Właściwie wdrażam twój program. Aby Twoje testy wydajności były odpowiednio dynamiczne oraz łatwe w utrzymaniu i modyfikacji w przyszłości, musisz pomyśleć o tym, jak je ustrukturyzować. Prawdopodobnie będziesz chciał użyć pętli do szacowania wydajności modelu głównego, najlepiej o długości definiowanej przez użytkownika, aby umożliwić większą elastyczność w przyszłości. Prawdopodobnie zechcesz także napisać osobne funkcje dla każdej akcji, którą program ma wykonać, ponieważ ułatwi to testowanie funkcjonalności oraz utrzymanie i modyfikację programu w przyszłości. Będziesz potrzebował co najmniej funkcji do wyboru zestawu danych (tj. Tylko okresów, które „minęły” w momencie testowania wstecznego), czyszczenia i sprawdzania poprawności (o czym naprawdę będziesz musiał pomyśleć,

Twoje pytanie dotyczące wykrywania i obsługi wartości odstających również podlega tym dwóm problemom. Zacznę wdrażać, pisząc mniejsze pętle w głównej pętli programu, które będą dalej „czyścić” i modyfikować model, dopóki nie osiągniesz punktu, w którym byłbyś zadowolony to (które znowu będziesz musiał zdefiniować).

Jeśli to brzmi jak duże zadanie, to dlatego, że tak jest; ludzie napisali całe biblioteki oprogramowania (czasem bardzo lukratywnie), aby wykonać tego rodzaju zadanie. Poza tym trudno jest udzielić bardziej szczegółowych porad, nie wiedząc więcej o swoich procesach, strukturze danych i języku programowania, w którym do tej pory wykonywałeś swoją pracę.

Jeśli którykolwiek z tych elementów jest dla ciebie przydatny i chciałbyś, abym rozwinął którykolwiek z nich, skomentuj, daj mi znać, a chętnie to zrobię.

habu
źródło
Nie potrzebuję żadnej pomocy przy pisaniu kodu, dzięki - nasza infrastruktura do testowania wstecznego jest już gotowa i dość silna. Interesuje mnie tylko, jakich procedur statystycznych można użyć. W odniesieniu do heurystycznej automatyzacji interaktywnej części budowy modelu: czy coś o tym napisano? W literaturze nie widziałem żadnych wzmianek o takim procesie. Wspominasz „ludzie napisali całe biblioteki oprogramowania” - czy masz jakieś referencje?
Ben Kuhn
@BenKuhn - W oparciu o Twój komentarz nie jestem pewien, jakie dokładnie masz trudności; pomóż mi uzyskać trochę więcej jasności. Zastosowanie heurystyki w automatycznym budowaniu modeli jest dość powszechne; najbardziej podstawową aplikacją, o której mogę teraz myśleć, jest skromna regresja krokowa. Brakuje dokładnych szczegółów twojego modelu, nie mogę wskazać dokładnej literatury, która może ci pomóc, ale pobieżna wyszukiwarka Google zawiera kilka artykułów eksplorujących metody automatycznego wyboru parametrów, szczególnie wygładzania i karania splajnów. Zobacz mój następny komentarz, aby znaleźć kilka linków
habu
@BenKuhn - co konkretnie masz na myśli mówiąc, że możesz zastosować procedury statystyczne? Moim zdaniem testowanie danych można było przeprowadzić dość prosto, stosując próbkowanie w pociągu z ruchomym lub rozszerzającym się oknem wyboru danych. Wszystkie dane, które zgromadziłeś aż do momentu weryfikacji historycznej, byłyby zestawem treningowym, a dane, których spodziewałbyś się zobaczyć w następnym okresie, zanim będziesz mieć szansę na dostosowanie modelu, będą zestawem testowym. Do zwykłej oceny można wykorzystać wszystkie zwykłe miary wydajności predykcyjnej i dopasowania.
habu
@BenKuhn - Wdrożenie rzeczywistej części wiedzy biznesowej wymagałoby jej skodyfikowania i zapewnienia, że ​​dane potrzebne do dokonania takich ustaleń są dostępne w razie potrzeby. Używam również terminu „biblioteka oprogramowania” jako ogólnego pojęcia obejmującego wszystko, od rozszerzeń do istniejących bibliotek modelowania, które mają zautomatyzować budowanie modeli dla niektórych aplikacji, aż do przemysłowych, zastrzeżonych ekspertów i systemów wspomagania decyzji.
habu
3

Zamiast próbować dowiedzieć się, jak zautomatyzować wysiłki związane z ręcznym dostrajaniem modelu, omijałbym ten problem razem, patrząc na osoby uczące się o mniejszej wariancji, które wymagają znacznie mniejszego dostrajania, nawet jeśli wiąże się to ze zwiększonym obciążeniem modelu. Chcesz mieć zaufanie do swoich wyników weryfikacji historycznej, co w dużej mierze sprowadza się do niskiej wariancji próbkowania w twoich prognozach, a wprowadzenie procesu automatycznego dostrajania u ucznia, który już ma wariancję próbkowania, działa wbrew temu celowi. Może się wydawać, że ogon macha tu psem, ale wszystko, co wymaga dużo starannego strojenia (manualnego lub automatycznego), nie jest doskonałym kandydatem do naprawdę uczciwego środowiska testowania wstecznego IMO.

Andrzej
źródło
Dlaczego automatyczne dostrajanie (z osobnym uruchomieniem dostrajania w każdym punkcie czasowym weryfikacji historycznej) nie byłoby „naprawdę uczciwym środowiskiem weryfikacji historycznej”?
Ben Kuhn
Zmniejszenie wariancji poprzez upuszczenie splajnów doprowadziłoby niestety do niedopuszczalnej utraty mocy predykcyjnej. Czy to właśnie myślałeś, kiedy zaproponowałeś użycie ucznia o niższej wariancji? Jeśli nie, to o czym myślisz?
Ben Kuhn
@BenKuhn - podzielam obawy Andrew dotyczące tego, czy test wsteczny byłby naprawdę „uczciwym” testem mocy prognostycznej modelu poza próbą, choćby z tego powodu, że wydaje się, że opracowałeś parametry strojenia na cały zestaw danych dostępny dla ciebie; nawet jeśli „cofniesz zegar” i dynamicznie przebudujesz model, metodologia, dzięki której będziesz to robić, zostanie opracowana w odniesieniu do całego zestawu danych, więc istnieje ryzyko, że model nadal będzie się przestawiał, nawet jeśli jest ponownie przeszkolony w zakresie podzbioru dostępnych danych.
habu
1
Aby wyjaśnić, automatyczne dostrajanie sprawiłoby, że byłoby to uczciwe w tym sensie, że przewidywania w czasie nie zależą od danych z czasu większego niż . Do @ @ habu, zawsze będzie jakieś nieredukowalne odchylenie w próbie, które wynika z iteracyjnego ulepszania twojego modelu na podstawie wydajności testów historycznych, i tak naprawdę nie widzę sposobu na obejście tego (zakładam, że jest to wniosek o finansowanie). Chodziło mi o to, że twój przedział ufności w odniesieniu do wyników testu historycznego jest związany z wariancją próbkowania predyktora i procesem strojenia nad nim. tt
andrew
1
A w domenie tak hałaśliwej jak finanse chcesz się upewnić, że gdyby historia rozwijała się nieco inaczej (ale nadal czerpała z jakiejś podstawowej dystrybucji), nadal byłbyś w stanie uzyskać podobny model. Jeśli masz pewność, że Twój proces jest odporny na próbkowanie wariancji, uważam, że jesteś dobry. Z mojego doświadczenia wynika, że ​​procedury automatycznego strojenia mogą być bardzo wrażliwe na wariancję próbkowania.
andrew