Imputacja przed lub po podziale na pociąg i test?


18

Mam zestaw danych z N ~ 5000 i brakuje mi około 1/2 co najmniej jednej ważnej zmiennej. Główną metodą analityczną będą proporcjonalne zagrożenia Coxa.

Planuję zastosować wielokrotne przypisanie. Podzielę się również na pociąg i zestaw testowy.

Czy należy podzielić dane, a następnie przypisać osobno, czy przypisać, a następnie podzielić?

Jeżeli ma to znaczenie, będę używał PROC MIw SAS.


2
50% brakujących wartości dla kluczowej zmiennej? Ugh. Zamiast przypisywać, dlaczego nie utworzyć kategorii „Brak” dla zmiennej?
RobertF

W żadnej zmiennej brakuje 50%, ale około 50% brakuje w co najmniej jednej. Są też ciągłe, więc „brak” zepsułoby wszystko.
Peter Flom - Przywróć Monikę

Ach Denerwuję się przy użyciu imputacji. Zastanawiam się nad zaletami posiadania zmiennej ciągłej z przypisanymi wartościami 50% vs. konwersja cd. zmienna na kategoryczną z kategorią „brakującą” oraz wystarczająca liczba pojemników, aby uchwycić zachowanie brakujących wartości?
RobertF

Nie lubię grupować zmiennych ciągłych.
Peter Flom - Przywróć Monikę

Odpowiedzi:


20

Powinieneś podzielić się przed przetwarzaniem wstępnym lub przypisaniem.

Podział między zestawem szkoleniowym a testowym jest próbą odtworzenia sytuacji, w której posiadasz informacje z przeszłości i budujesz model, który przetestujesz na przyszłych, jak dotąd nieznanych informacjach: zestaw treningowy zastępuje przeszłość, a zestaw testowy zajmuje miejsce przyszłości, więc możesz przetestować wyszkolony model tylko raz.

Mając na uwadze analogię z przeszłością / przyszłością, oznacza to wszystko, co robisz, aby wstępnie przetwarzać lub przetwarzać swoje dane, takie jak przypisywanie brakujących wartości, które powinieneś zrobić na samym zestawie szkoleniowym. Następnie możesz zapamiętać, co zrobiłeś ze swoim zestawem treningowym, jeśli twój zestaw testowy wymaga również wstępnego przetwarzania lub przypisania, abyś zrobił to tak samo na obu zestawach.

Dodane z komentarzy: jeśli użyjesz danych testowych do wpłynięcia na dane treningowe, wówczas dane testowe są wykorzystywane do budowy twojego modelu, więc przestają być danymi testowymi i nie zapewnią rzetelnego testu twojego modelu. Ryzykujesz nadmiernym dopasowaniem, a przede wszystkim po to, żeby oddzielić dane testowe


Kiedy mówisz „robisz to w ten sam sposób na obu zestawach”, masz na myśli: „użyj tej samej metody, aby przypisać brakujące dane w zestawie testowym, ale NIE te same dane”?
timwiz

@colorlace Użyj analogii przeszłość / przyszłość. Używałeś zestawu treningowego w przeszłości i przypisywałeś pewne wartości. Otrzymasz teraz zestaw testowy w przyszłości i chcesz przypisać niektóre z jego wartości; prawdopodobnie użyjesz tej samej metody, co poprzednio zastosowanej do danych testowych (chociaż możesz uwzględnić to, czego nauczyłeś się z danych treningowych)
Henry

Jeśli „mogą swobodnie zawierać czego dowiedział się od danych szkolenia”, a następnie w jaki sposób jest to, że różni się od tylko nie rozszczepiania przed przypisaniem.
timwiz

1
@colorlace: ten ostatni punkt jest dokładnie tym, co mówię: dane testowe nie powinny zawierać informacji o danych treningowych (analogia jest taka, że ​​przyszłość nie powinna wpływać na przeszłość), ale to, co robisz z danymi testowymi mogą być poinformowani na podstawie danych treningowych (analogia jest taka, że ​​możesz wykorzystać przeszłość, aby pomóc przewidzieć przyszłość)
Henry

1
@colorlace - jeśli użyjesz danych testowych, aby wpłynąć na dane treningowe, wówczas dane testowe zostaną użyte do zbudowania twojego modelu, więc przestaną być danymi testowymi i nie zapewnią rzetelnego testu twojego modelu. Ryzykujesz nadmiernym dopasowaniem, a żeby go zniechęcić, wydzieliłeś dane testowe w pierwszej kolejności
Henry

1

Myślę, że lepiej rozstać się przed dokonaniem imputacji. Na przykład możesz chcieć przypisać brakujące wartości średniej w kolumnie. W takim przypadku, jeśli najpierw przypisasz ciąg + prawidłowy zestaw danych, a następnie podzielisz, użyłeś zestawu danych sprawdzania poprawności przed zbudowaniem modelu, w ten sposób powstaje problem wycieku danych.

Ale możesz zapytać, jeśli przypisuję po podziale, może to być zbyt nużące, kiedy muszę dokonać krzyżowej weryfikacji. Proponuję do tego użyć potoku sklearn. To naprawdę upraszcza kod i zmniejsza ryzyko popełnienia błędu. Zobacz Rurociąg


0

Aby dodać powyższe, wolałbym również podział przed przypisaniem lub jakimkolwiek rodzajem wstępnego przetwarzania. Nic, co robisz z danymi treningowymi, nie powinno być informowane przez dane testowe (analogia jest taka, że ​​przyszłość nie powinna wpływać na przeszłość). Następnie możesz zapamiętać, co zrobiłeś z zestawem treningowym, jeśli zestaw testowy wymaga również wstępnego przetwarzania lub przypisania, dzięki czemu możesz to zrobić w ten sam sposób na obu zestawach (analogia polega na tym, że możesz użyć przeszłości, aby przewidzieć przyszłość) .

Jeśli użyjesz danych testowych, aby w jakikolwiek sposób wpłynąć na dane treningowe, wówczas dane testowe są wykorzystywane do budowy modelu, więc przestają być danymi testowymi i nie zapewnią rzetelnego testu twojego modelu. Ryzykujesz nadmiernym dopasowaniem, a przede wszystkim po to, aby oddzielić dane testowe!

Myślę, że pakiet karetki wr jest bardzo przydatny w tym ustawieniu. W szczególności ten post okazał się niezwykle pomocny https://topepo.github.io/caret/model-training-and-tuning.html

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.