ProjekteProjects / Healthcare Fraud Detection
analytics/python

Healthcare Fraud Detection

18.764 Abrechnungen, drei Modellfamilien und die Frage, warum die besten öffentlichen Notebooks zu diesem Datensatz zu gut sind, um wahr zu sein. 18,764 claims, three model families, and the question of why the best public notebooks on this dataset are too good to be true.

KursCourse · Data Management & Analytics
OrtInstitution · WU Wien, MasterWU Vienna, master's
DatumDate · 2026
Mein TeilMy part · KlassifikationClassification
Vollständiges Notebook ↗Full notebook ↗ Alle ProjekteAll projects
/01

Die FrageThe question

Abrechnungsbetrug im Gesundheitswesen kostet Kostenträger weltweit dreistellige Milliardenbeträge pro Jahr. Das Problem ist nicht, dass die Fälle unsichtbar wären, sondern dass sie zwischen Millionen völlig gewöhnlicher Abrechnungen liegen und Prüfteams nur einen Bruchteil davon manuell ansehen können.

Healthcare claim fraud costs payers hundreds of billions per year worldwide. The problem is not that the cases are invisible, but that they sit among millions of entirely ordinary claims while audit teams can only review a fraction of them manually.

Der Kurs gab einen Datensatz mit 18.764 einzelnen Versicherungsabrechnungen vor. Wir haben ihn entlang von drei Fragen bearbeitet, die je einer Methodenfamilie entsprachen:

The course provided a dataset of 18,764 individual insurance claims. We worked through it along three questions, each mapping to one family of methods:

  1. Lassen sich Abrechnungen in sinnvolle Gruppen mit unterschiedlichem Risikoprofil segmentieren? (Clustering)
  2. Can claims be segmented into meaningful groups with different risk profiles? (clustering)
  3. Lässt sich der genehmigte Erstattungsbetrag aus den Merkmalen der Abrechnung vorhersagen? (Regression)
  4. Can the approved reimbursement amount be predicted from claim characteristics? (regression)
  5. Lässt sich eine Abrechnung zum Einreichungszeitpunkt als betrügerisch markieren, also bevor sie bearbeitet wurde? (Klassifikation)
  6. Can a claim be flagged as fraudulent at submission time, before it has been processed? (classification)

Die dritte Frage war mein Teil, und sie enthält die eigentliche Pointe des Projekts. Zu diesem Datensatz existieren öffentliche Notebooks mit nahezu perfekten Ergebnissen. Die Frage war, ob sich das reproduzieren lässt und ob es überhaupt etwas bedeutet.

The third question was my part, and it contains the actual point of the project. Public notebooks on this dataset report near-perfect results. The question was whether that reproduces, and whether it means anything at all.

AbrechnungenClaims18.76418,764
Features danachFeatures after prep60
BetrugsanteilFraud share8,78.7%
ClusterClusters4
/02

VorgehenMethod

Gearbeitet wurde in JupyterLab mit Python, pandas und scikit-learn. Die Aufbereitung lief gemeinsam, danach übernahm je eine Person eine der drei Methodenfamilien.

The work was done in JupyterLab with Python, pandas and scikit-learn. Data preparation was shared; after that each person took one of the three method families.

AufbereitungPreparation

  • Fehlende Werte in drei Spalten (600, 663 und 828 Einträge). Eine Korrelationsanalyse bestätigte, dass sie völlig zufällig fehlen und nicht mit der Zielvariable zusammenhängen. Kategorien bekamen „Unknown", die Vorbesuche eine 0.
  • Missing values in three columns (600, 663 and 828 entries). A correlation analysis confirmed they are missing completely at random and unrelated to the target. Categories were filled with "Unknown", prior visits with 0.
  • Ausreißer bei den Betragsspalten auf das 99. Perzentil gekappt statt gelöscht, damit keine Beobachtung verloren geht.
  • Outliers in the amount columns capped at the 99th percentile rather than dropped, so no observation is lost.
  • Feature Engineering: zehn zusätzliche Variablen, darunter Finanzverhältnisse, Datumsmerkmale und binäre Patienten- und Anbieterindikatoren.
  • Feature engineering: ten additional variables, including financial ratios, date features and binary patient and provider indicators.
  • Skalierung und Encoding ergaben einen Endstand von 18.764 Beobachtungen und 60 Features.
  • Scaling and encoding produced a final dataset of 18,764 observations and 60 features.

Was die anderen beiden Teile ergabenWhat the other two parts found

Das Clustering (K-Means über elf Merkmale, Betrugslabel bewusst ausgeschlossen und nur zur Validierung genutzt) fand vier Gruppen mit sehr unterschiedlichem Risiko: drei große Cluster zwischen 3,7 % und 10,9 % Betrugsanteil und ein kleines, klar abgesetztes Cluster mit 618 Abrechnungen und einem Betrugsanteil von 98,9 %. Auffällig dort: hohe Antragsverhältnisse, große Differenzen zwischen gefordertem und genehmigtem Betrag und sehr kurze Einreichungsfristen.

The clustering (k-means over eleven features, with the fraud label deliberately excluded and used only for validation) found four groups with very different risk: three large clusters between 3.7% and 10.9% fraud, and one small, clearly separated cluster of 618 claims with a fraud rate of 98.9%. Its markers: high claim ratios, large gaps between claimed and approved amounts, and very short submission delays.

Die Regression auf den genehmigten Betrag erreichte ein R² von rund 0,93, aber die ehrliche Lesart ist eine andere: Der geforderte Betrag allein trägt etwa 99 % des Koeffizientengewichts. Ohne ihn erreichten alle vier Modelle ein negatives R², waren also schlechter als der Mittelwert. Patientenalter, Diagnose, Fachrichtung und Versicherungstyp tragen praktisch nichts bei.

The regression on the approved amount reached an R² of about 0.93, but the honest reading is different: the claimed amount alone carries roughly 99% of the coefficient weight. Without it, all four models produced a negative R², performing worse than simply predicting the mean. Patient age, diagnosis, specialty and insurance type contribute virtually nothing.

Mein Teil: die KlassifikationMy part: the classification

Verglichen wurden Logistische Regression, ein Decision Tree und ein Random Forest. Weil nur rund 8,7 % der Abrechnungen betrügerisch sind, wäre Accuracy hier nutzlos: Ein Modell, das immer „kein Betrug" sagt, läge bei 91 %. Bewertet wurde deshalb über Konfusionsmatrix, Precision, Recall, F1 und ROC-AUC für die Betrugsklasse, mit stratifiziertem Split und class_weight="balanced".

Logistic regression, a decision tree and a random forest were compared. Because only about 8.7% of claims are fraudulent, accuracy would be useless here: a model that always says "not fraud" scores 91%. Evaluation therefore used the confusion matrix, precision, recall, F1 and ROC-AUC for the fraud class, with a stratified split and class_weight="balanced".

Der entscheidende Schritt war, jedes Modell in zwei Feature-Szenarien laufen zu lassen:

The decisive step was running every model under two feature scenarios:

  • Voller Satz: alle Features, so wie es die öffentlichen Notebooks machen.
  • Full set: every feature, the way the public notebooks do it.
  • Nur Einreichungszeitpunkt: ohne die sechs Features, die erst existieren, nachdem der Versicherer die Abrechnung bearbeitet hat, also genehmigter Betrag, Bearbeitungsstatus und die daraus abgeleiteten Verhältnisse. Das ist die realistische Situation.
  • Pre-adjudication: without the six features that only exist after the insurer has processed the claim, meaning approved amount, claim status and the ratios derived from them. This is the realistic setting.
/03

ErgebnisseResults

Die nahezu perfekten Werte lassen sich reproduzieren. Sie beruhen aber auf Informationen, die es zum Einreichungszeitpunkt noch gar nicht gibt. Das ist Data Leakage, und der Abstand dazwischen ist messbar.

The near-perfect scores do reproduce. But they rest on information that does not yet exist at submission time. That is data leakage, and the gap it creates is measurable.

Voller Feature-SatzFull feature set enthält Nachbearbeitungs-Signalecontains post-adjudication signals
F1
Nur EinreichungszeitpunktPre-adjudication only realistische Situationrealistic setting
F1
0
ROC-AUC des Random Forest in beiden Feature-Szenarien. Der Abstand von rund 0,11 zeigt sich bei allen drei Modellfamilien gleich, ist also eine Eigenschaft der Features und nicht eines einzelnen Modells. ROC-AUC of the random forest under both feature scenarios. The gap of roughly 0.11 appears identically across all three model families, so it is a property of the features rather than of any single model.

Der wichtigste Treiber der Leakage ist das Verhältnis von gefordertem zu genehmigtem Betrag. Es beschreibt im Grunde bereits das Urteil des Versicherers und beantwortet damit die Frage, die das Modell eigentlich stellen sollte. Eine fünffache stratifizierte Kreuzvalidierung bestätigte, dass die 0,88 im ehrlichen Szenario stabil sind und nicht an einem glücklichen Split hängen (Standardabweichung rund 0,007).

The main driver of the leakage is the ratio between claimed and approved amount. It essentially already encodes the insurer's verdict, and thereby answers the question the model is supposed to ask. A five-fold stratified cross-validation confirmed that the 0.88 in the honest scenario is stable and does not depend on a lucky split (standard deviation about 0.007).

Der Schwellwert ist der eigentliche HebelThe threshold is the actual lever

Im ehrlichen Szenario stand der Random Forest zunächst nutzlos da: Beim Standard-Schwellwert von 0,5 erkannte er fast keinen Betrug. Das ist kein Modellfehler, sondern eine Folge der Klassen-Schieflage, denn bei seltenen Positivfällen überschreiten die gemittelten Wahrscheinlichkeiten eines Waldes selten 0,5. Die Rangfolge der Fälle war die ganze Zeit gut, nur der Schnitt lag falsch.

In the honest scenario the random forest initially looked useless: at the default threshold of 0.5 it caught almost no fraud. That is not a model failure but a consequence of class imbalance, since with rare positives the averaged probabilities of a forest seldom exceed 0.5. The ranking of cases was good all along; only the cut was in the wrong place.

Recall (erkannter Betrug)Recall (fraud caught)
Schwellwert 0,50Threshold 0.50 Standardeinstellungdefault setting
3 %3%
praktisch unbrauchbar
practically unusable
Schwellwert 0,21Threshold 0.21 auf bestes F1 getunttuned for best F1
62 %62%
Precision 44 %Precision 44%
F1
0 %0%25 %25%50 %50%75 %75%100 %100%
Derselbe Random Forest, dieselben Features, dieselbe ROC-AUC. Nur der Entscheidungs-Schwellwert wurde verschoben. Am getunten Punkt markiert das Modell rund 460 von etwa 3.750 Test-Abrechnungen, darunter rund 200 der 325 echten Betrugsfälle. The same random forest, the same features, the same ROC-AUC. Only the decision threshold was moved. At the tuned point the model flags about 460 of roughly 3,750 test claims, among them about 200 of the 325 actual fraud cases.

Woran das ehrliche Modell Betrug erkenntWhat the honest model keys on

Drei unabhängige Sichten (Impurity-Importance des Random Forest, die robustere Permutation-Importance und die Koeffizienten der Logistischen Regression als Odds Ratios) zeigen dasselbe Bild. Mit Abstand am wichtigsten ist die Zeit zwischen Leistung und Einreichung: Sie führt beide Importance-Ranglisten an, und ihre Permutation kostet ein Vielfaches an ROC-AUC gegenüber jedem anderen Merkmal. Zweiter Faktor ist der Rechnungsbetrag. Auch der Entscheidungsbaum trennt an der Wurzel genau danach.

Three independent views (the random forest's impurity importance, the more robust permutation importance, and the logistic regression coefficients as odds ratios) all point the same way. By far the most important is the time between service and claim submission: it leads both importance rankings, and permuting it costs several times more ROC-AUC than any other feature. The second factor is the claim amount. The decision tree splits on exactly that at its root.

Betriebswirtschaftlich ergibt das Sinn: Betrügerische Abrechnungen werden hier auffällig schnell nach der Leistung eingereicht (Median rund 4 Tage gegenüber 15 bei legitimen) und sind tendenziell überhöht. Alle übrigen demografischen und Codierungs-Merkmale tragen kaum noch etwas bei, sobald diese beiden berücksichtigt sind.

That makes business sense: fraudulent claims here are submitted strikingly soon after the service (median about 4 days versus 15 for legitimate ones) and tend to be inflated. All remaining demographic and coding features add almost nothing once those two are accounted for.

/04

EinordnungInterpretation

Ja, eine Abrechnung lässt sich zum Einreichungszeitpunkt markieren, aber deutlich unspektakulärer als die öffentlichen Notebooks nahelegen. Und das ehrliche Modell ist trotzdem brauchbar, nur für eine andere Aufgabe.

Yes, a claim can be flagged at submission time, but far less impressively than the public notebooks suggest. And the honest model is still useful, just for a different job.

Der Schwellwert ist dabei kein technisches Detail, sondern eine Geschäftsentscheidung: Senkt man ihn, erkennt man mehr Betrug und prüft mehr unauffällige Fälle mit; hebt man ihn, bleiben die Prüfungen fokussiert. Der sinnvolle Einsatz ist deshalb nicht die automatische Ablehnung, sondern die Priorisierung: Das Modell sortiert die Warteschlange für die menschliche Prüfung.

The threshold is not a technical detail but a business decision: lower it to catch more fraud at the cost of auditing more clean cases; raise it to keep audits focused. The sensible use is therefore not automatic rejection but triage: the model orders the queue for human review.

EinschränkungenLimitations

Der Datensatz ist synthetisch erzeugt. Der fast perfekte lineare Zusammenhang zwischen gefordertem und genehmigtem Betrag ist mit hoher Wahrscheinlichkeit ein Artefakt der Datenerzeugung und kein Abbild echter Erstattungsprozesse. Die Ergebnisse sind deshalb als methodische Demonstration zu lesen und nicht als direkt übertragbarer Praxisbefund.

The dataset is synthetically generated. The near-perfect linear relationship between claimed and approved amount is very likely an artifact of how the data was created rather than a reflection of real reimbursement processes. The results should therefore be read as a methodological demonstration, not as a finding that transfers directly into practice.

Was ich daraus mitgenommen habeWhat I took away

Die technische Arbeit war der kleinere Teil. Der größere war, einer ROC-AUC von 0,997 nicht zu glauben. Ein Modell, das die eigene Zielfrage schon im Input stehen hat, sieht großartig aus und ist wertlos, und genau das passiert in der Praxis ständig, weil Feature-Tabellen selten dokumentieren, wann ein Wert eigentlich entsteht. Seitdem ist meine erste Frage bei jedem Modell nicht mehr, wie gut es ist, sondern zu welchem Zeitpunkt jedes Feature bekannt sein wird.

The technical work was the smaller part. The larger part was not believing a ROC-AUC of 0.997. A model that already has its own target question sitting in the input looks excellent and is worthless, and that happens constantly in practice because feature tables rarely document when a value actually comes into existence. Since then my first question about any model is no longer how good it is, but at what point in time each feature becomes known.

Skills darausSkills gained PythonPythonscikit-learnscikit-learnKlassifikationsmodelleClassification modelsData-Leakage-ErkennungDetecting data leakageThreshold-TuningThreshold tuningKreuzvalidierungCross-validationDatenanalyse & StatistikData analysis & statistics