Kontekst: Opracowuję system analizujący dane kliniczne w celu odfiltrowania nieprawdopodobnych danych, które mogą być literówkami.
Co do tej pory zrobiłem:
Aby oszacować wiarygodność, do tej pory próbowałem znormalizować dane, a następnie obliczyć wartość wiarygodności dla punktu p na podstawie jego odległości do znanych punktów danych w zestawie D (= zestaw treningowy):
Dzięki tej kwantyfikacji mogę następnie wybrać próg, który oddziela wiarygodne dane od nieprawdopodobnych danych. Używam python / numpy.
Moje problemy:
- Ten algorytm nie wykrywa niezależnych wymiarów. Idealnie byłoby, gdybym umieścił w algorytmie wszystko, co wiem o rekordzie, i sam przekonałbym się, że wymiar X nie wpływa na wiarygodność zapisu.
- Algorytm tak naprawdę nie działa w przypadku wartości dyskretnych, takich jak wartości logiczne lub wybrane dane wejściowe. Można je odwzorować na ciągłe wartości, ale sprzeczne z intuicją jest to, że Select 1 jest bliżej Select 2 niż Select 3.
Pytanie:
Jakiego rodzaju algorytmów powinienem szukać w tym zadaniu? Wydaje się, że istnieje mnóstwo opcji, w tym podejście oparte na najbliższym sąsiedztwie, oparte na klastrowaniu i statystyczne. Mam też problemy ze znalezieniem artykułów, które zajmują się wykrywaniem anomalii tej złożoności.
Wszelkie porady są mile widziane.
[Edytuj] Przykład:
Załóżmy, że dane zawierały wysokość osoby, wagę osoby i znacznik czasu - więc są to dane 3D. Waga i wzrost są skorelowane, ale znacznik czasu jest całkowicie niezależny. Jeśli wezmę pod uwagę odległości euklidesowe, musiałbym wybrać mały próg, aby pasował do większości moich danych dotyczących weryfikacji krzyżowej. Idealnie byłoby, gdyby algorytm po prostu zignorował wymiar znacznika czasu, ponieważ ustalenie, czy rekord jest wiarygodny, nie ma znaczenia, ponieważ znacznik czasu nie jest w żaden sposób powiązany z innymi wymiarami. Każdy znacznik czasu jest prawdopodobny.
Z drugiej strony można wymyślić przykłady, w których znacznik czasu ma znaczenie. Na przykład może być tak, że wartość Y dla cechy X jest wiarygodna, gdy jest mierzona przed określoną datą, ale nie po określonej dacie.
Odpowiedzi:
Typowym sformułowaniem Wykrywania Anomalii jest znalezienie średniej i wariancji dla każdej z cech nieanormalnych danych, a jeśli jest wektorem tych cech mających składowe to zdefiniuj prawdopodobieństwo kombinacji cech jakom x xi p(x)
gdzie każdy jest rozłożony gaussa:xi xi∼N(μi,σ2i)
anomalia występuje za każdym razem, gdyp(x)<ϵ
Rozkład każdego nie musi być w rzeczywistości normalny, ale lepiej jest, jeśli jest przynajmniej normalny. Ale funkcje, których używasz, są dowolne; można je pobierać bezpośrednio z surowych danych lub obliczać, więc na przykład jeśli uważasz, że funkcja jest lepiej modelowana za pomocą ustaw ją na zamiast .xi xi log log(xi) xi
To wydaje się bardzo podobne do tego, co już robisz, jeśli weźmiesz .q=μ
Określanieϵ
Algorytm pasuje do przykładów negatywnych (nie-anomalie). Ale jest określany na podstawie zestawu weryfikacji krzyżowej i zwykle jest wybierany jako wartość, która zapewnia najlepszy wynikϵ F1
Ale aby obliczyć F1, musisz wiedzieć, co jest anomalne, a co nie; to jest prawdziwie pozytywne, gdy system przewiduje anomalię, a faktycznie jest to anomalia, fałszywie pozytywne są przewidywane anomalie, które tak naprawdę nie są i tak dalej. Więc jeśli tego nie masz, być może będziesz musiał wrócić do zgadywania.
Problem skorelowanych cech
Powyższe ma jednak wadę, jeśli cechy są skorelowane. Jeśli tak, to powyższe obliczenia mogą nie oznaczać czegoś, co faktycznie jest anomalne. Rozwiązaniem tego problemu jest użycie wielowymiarowego gaussa dla funkcji gdzie jest macierzą kowariancji.m Σ
To samo dotyczy znalezienia a to podejście ma również tę wadę, że musisz obliczyć odwrotność . Musi więc być co najmniej tyle próbek, ile cech, a jeśli liczba cech jest duża, proces będzie intensywny obliczeniowo, a ty musisz zabezpieczyć się przed cechami zależnymi liniowo. Pamiętaj o tych zastrzeżeniach, ale wydaje się, że nie stanowi to problemu.ϵ Σ
źródło
Prawie skończyłem projekt, w którym musiałem rozwiązać te problemy i chciałbym podzielić się moim rozwiązaniem, na wypadek, gdyby ktoś miał te same problemy.
Po pierwsze, podejście, które opisałem, jest bardzo podobne do oszacowania gęstości jądra . Dobrze było wiedzieć o badaniach ...
Niezależne funkcje
Niezależne funkcje można odfiltrować, mierząc współczynnik korelacji . Porównałem wszystkie cechy parami i zmierzyłem korelację. Następnie wziąłem maksymalny współczynnik korelacji bezwzględnej każdej cechy jako współczynnik skalowania. W ten sposób cechy, które nie korelują z żadnymi innymi, są mnożone przez wartość bliską 0, a zatem ich wpływ na odległość euklidesową(inaczej ) jest nieistotna.||x1−x2|| distance(x1,x2)
Uwaga: współczynnik korelacji może mierzyć tylko korelacje liniowe. Szczegółowe informacje można znaleźć na połączonej stronie wiki. Jeśli korelacja w danych może być aproksymowana liniowo, działa to dobrze. Jeśli nie, powinieneś rzucić okiem na ostatnią stronę tego artykułu i sprawdzić, czy możesz użyć ich pomiaru korelacji, aby uzyskać współczynnik skalowania.
Wartości dyskretne
Użyłem opisanego algorytmu tylko do wartości ciągłych. Do filtrowania zestawu treningowego zastosowano wartości dyskretne. Więc jeśli mam wzrost i wagę osoby i wiem, że ona jest kobietą, będę patrzeć tylko na próbki od innych kobiet w celu sprawdzenia anomalii.
źródło