hackathon-ENGIN/docs/JURY_QA.md
Jakub Famulski 2 5251e9629f
All checks were successful
ENGIN CI / Build, test and smoke (push) Successful in 1m1s
ui: simplify diagnostics before demo
2026-08-25 16:38:18 +02:00

52 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ENGIN — pytania i odpowiedzi dla jury
## Czy wynik nie ma leakage między cylindrami?
Nie. Podział wykorzystuje `engine_id`; wszystkie cylindry jednego silnika trafiają razem wyłącznie do train albo validation. Raportowany wynik pochodzi z OOF dla wcześniej niewidzianych silników.
## Dlaczego nie CNN?
Dane mają tylko 21 cech częstotliwościowych na cylinder i niewielki zbiór etykietowany. Prostszy model daje lepszy kompromis między jakością, stabilnością, explainability oraz czasem inference na CPU. CNN zwiększałby liczbę parametrów i ryzyko overfittingu bez udowodnionej korzyści.
## Skąd bierze się referencja cylindra?
Dla każdego cylindra liczona jest mediana pozostałych cylindrów tego samego silnika. To leave-one-cylinder-out: badany cylinder nigdy nie współtworzy własnej referencji.
## Co oznacza `unknown`?
To bezpieczna decyzja dla anomalii, która nie pasuje stabilnie do znanych klas. Reguła OOD może zmienić tylko anomalną predykcję `ok` na `unknown`; nie nadpisuje rozpoznanej konkretnej usterki.
Próg ma dwa warunki: cylinder musi przekroczyć 7.25 mV średniego odchylenia oraz 2.5× medianę anomalii własnego silnika. Drugi warunek chroni przed uznaniem ogólnie głośnej jednostki za zbiór izolowanych OOD. Oba warunki zachowały raportowany wynik clean i masked 5%, ale nadal wymagają potwierdzenia na większej flocie.
## Jak obsługiwane są braki?
Punkty widma są interpolowane wzdłuż częstotliwości z fallbackiem medianowym. Pipeline został ponownie sprawdzony po deterministycznym zamaskowaniu dokładnie 5% komórek. Aplikacja odrzuca cylinder z ponad 50% braków i ostrzega przy wysokim udziale braków całego pliku.
## Czy status silnika jest osobnym modelem?
Nie. Status jest deterministyczną regułą biznesową opartą bezpośrednio na label i najwyższym severity. Usunęliśmy arbitralny Engine Health 0100, ponieważ zbiór nie zawiera prawdy referencyjnej dla takiej skali. Aplikacja pokazuje najwyższe rzeczywiste severity i porządkowy priorytet kontroli.
## Czy score modelu jest prawdopodobieństwem awarii?
Nie. To niekalibrowany wynik `predict_proba`, używany wyłącznie do diagnostyki technicznej. Główny widok mechanika go nie pokazuje; zamiast tego prezentuje diagnozę, nasilenie, priorytet oraz dowód w widmie i porównanie z pozostałymi cylindrami. Dla `unknown` utworzonego przez regułę OOD wartość pozostaje pusta.
## Co robi aplikacja przy błędnym pliku?
Waliduje strukturę przed inference i zwraca komunikat z kodem błędu oraz działaniem naprawczym. Sprawdza między innymi kompletność silnika, duplikaty, typy liczbowe, zakres amplitudy, liczbę cylindrów i udział braków. Traceback nie jest ujawniany użytkownikowi.
## Czy rozwiązanie wymaga chmury albo GPU?
Nie. Całość działa lokalnie na CPU i nie wysyła pomiarów na zewnątrz. Warstwa aplikacyjna używa Logistic Regression i Extra Trees.
## Jak wiarygodne są podane metryki?
To średnia z pięciu seedów walidacji grupowej: Macro F1 0.9811, severity accuracy 0.9298 i Raw Score 0.9683. Nie przedstawiamy tych liczb jako wyniku ukrytego testu. Negative control severity pozostaje blisko przypadku.
## Jak rozwiązanie można wdrożyć?
Obecna wersja jest aplikacją Streamlit z interfejsami `FrameReader`, `FrameValidator` i `PredictionModel`. Adapter modelu można później zastąpić usługą API albo modelem zapisanym na dysku bez zmiany logiki prezentacji. Dołączony Dockerfile daje powtarzalne uruchomienie.
## Najbliższe rozszerzenia po hackathonie
Kalibracja score na większym zbiorze, historia diagnoz, integracja z numerem seryjnym i zleceniem serwisowym, monitoring driftu oraz walidacja rekomendacji z mechanikami Aesteel.