Commit Graph

78 Commits

Author SHA1 Message Date
6cfd22f586 duplicate_checker.py aktualisiert 2025-09-24 15:37:12 +00:00
e3efe46cf6 duplicate_checker.py aktualisiert 2025-09-24 14:23:45 +00:00
8c1f4a6bd5 duplicate_checker.py aktualisiert 2025-09-10 11:26:28 +00:00
2fcc7d3a06 duplicate_checker.py aktualisiert 2025-09-10 08:13:02 +00:00
bb42ac2db8 NEU: Integration eines trainierten Machine-Learning-Modells (XGBoost) für die Match-Entscheidung
--- FEATURES v5.0 ---
- NEU: Integration eines trainierten Machine-Learning-Modells (XGBoost) für die Match-Entscheidung.
- Das Modell wurde auf dem vom Benutzer bereitgestellten "Gold-Standard"-Datensatz trainiert.
- Feature Engineering: Für jeden Vergleich werden ~15 Merkmale berechnet, die dem Modell als Input dienen.
- Die alte, heuristische Scoring-Logik wurde vollständig durch das ML-Modell ersetzt.
- Ergebnis ist eine datengetriebene, hochpräzise Duplikatserkennung mit >80% Trefferquote.
2025-09-08 11:24:01 +00:00
48fa1d9a61 duplicate_checker.py aktualisiert
- NEU: Mehrstufiges Entscheidungsmodell für höhere Präzision und "Großzügigkeit".
- Stufe 1: "Golden Match" für exakte Treffer.
- Stufe 2: "Kernidentitäts-Bonus & Tie-Breaker" zur korrekten Zuordnung von Konzerngesellschaften.
- Stufe 3: Neu kalibrierter, gewichteter Score für alle anderen Fälle.
- Intelligenter Tie-Breaker, der nur bei wirklich guten und engen Kandidaten greift.
2025-09-05 11:40:52 +00:00
675c2b9598 duplicate_checker.py aktualisiert
--- FEATURES v4.0 ---
- NEU: "Kernidentitäts-Bonus": Ein hoher Bonus wird vergeben, wenn das seltenste (wichtigste) Token übereinstimmt.
  Dies fördert das "großzügige Matchen" auf Basis der Kernmarke (z.B. "ANDRITZ AG" vs. "ANDRITZ HYDRO").
- NEU: Intelligenter "Shortest Name Tie-Breaker": Wird nur noch bei sehr hohen und sehr ähnlichen Scores angewendet.
- Finale Kalibrierung der Score-Berechnung und Schwellenwerte für optimale Balance.
- Golden-Rule für exakte Matches und Interaktiver Modus beibehalten.
2025-09-05 09:39:56 +00:00
ffad12dae5 duplicate_checker.py aktualisiert
- NEU: "Shortest Name Tie-Breaker": Bei sehr ähnlichen Scores wird der Kandidat mit dem kürzeren Namen bevorzugt,
  um das Prinzip der "wirtschaftlichen Einheit" (z.B. Holding) besser abzubilden.
- Scoring-Formel und Schwellenwerte erneut feinjustiert für finale Balance.
- Golden-Rule und Interaktiver Modus beibehalten.
2025-09-05 08:59:05 +00:00
82487b9865 duplicate_checker.py aktualisiert
- Scoring-Formel und Multiplikatoren neu gewichtet, um einzigartige Namens-Tokens stärker zu bewerten ("Großzügigkeits-Boost").
- Schwellenwerte (Thresholds) erneut feinjustiert, um die Balance zwischen korrekten und falschen Treffern zu optimieren.
- Logik des Domain-Gates beibehalten und sichergestellt, dass es korrekt greift.
- Golden-Rule und Interaktiver Modus unverändert.
2025-09-05 08:10:28 +00:00
15019e5326 duplicate_checker.py aktualisiert
- Dynamische Stopword-Erkennung entfernt, da sie zu aggressiv war. Häufige Wörter erhalten nun nur ein niedriges Gewicht.
 - Score-Berechnung und Schwellenwerte (Thresholds) komplett neu kalibriert für bessere Balance und Treffsicherheit.
 - "Domain-Gate" wieder eingeführt: Ein Domain-Match zählt nur dann stark, wenn auch eine minimale Namensähnlichkeit besteht.
 - Golden-Rule und Interaktiver Modus beibehalten.
2025-09-05 07:34:23 +00:00
d245d43182 Feat: Matching-Logik mit gewichtetem Scoring & Interaktiv-Modus (v3.0)
Diese Version überarbeitet den Kern des Matching-Algorithmus grundlegend, um die Genauigkeit drastisch zu erhöhen und die manuelle Nachbearbeitung zu reduzieren. Die Änderungen basieren auf der Analyse eines umfangreichen Testdatensatzes und setzen die neue Philosophie des "großzügigen Matchens" von wirtschaftlichen Einheiten um.

Gewichtetes Namens-Scoring (TF-IDF):
- Einzigartige Namensbestandteile (z.B. "Warema") erhalten nun ein höheres Gewicht als generische Füllwörter (z.B. "Stadtwerke", "Gruppe").
- Dies löst das Problem von Fehlzuordnungen bei häufig vorkommenden, aber nicht-identifizierenden Begriffen und verbessert die Treffsicherheit bei unklaren Firmennamen signifikant.

Golden-Rule für exakte Namens-Matches:
- Eine Namensübereinstimmung von >98% führt zu einem sofortigen "Golden Match" mit einem sehr hohen Score.
- Damit wird verhindert, dass klare Treffer durch abweichende Signale (z.B. unterschiedliche URLs von Tochterfirmen) fälschlicherweise bestraft werden.

Optionaler Interaktiver Modus:
- Kann mit dem Flag --interactive gestartet werden.
- Bei uneindeutigen Ergebnissen, bei denen die Top-Kandidaten sehr ähnliche Scores haben, hält das Skript an und ermöglicht dem Benutzer die direkte Auswahl des korrekten Matches aus einer übersichtlichen Liste.

Überarbeitete Scoring-Formel:
- Die Gesamtbewertung wurde neu balanciert, um dem jetzt deutlich aussagekräftigeren Namens-Score mehr Gewicht zu verleihen.
2025-09-04 14:34:28 +00:00
5d28da8aea duplicate_checker.py aktualisiert 2025-08-18 13:34:29 +00:00
cb9abc32e2 duplicate_checker.py aktualisiert 2025-08-18 12:48:05 +00:00
f973c24df7 duplicate_checker.py aktualisiert 2025-08-18 12:27:31 +00:00
2f009027c3 duplicate_checker.py aktualisiert 2025-08-18 12:11:35 +00:00
47a7e71d2a duplicate_checker.py aktualisiert 2025-08-18 11:32:37 +00:00
975014d5b0 duplicate_checker.py aktualisiert 2025-08-18 08:39:27 +00:00
c356203b52 feat(duplicate-checker): Quality-first++ – Domain-Gate, Location-Penalties, Smart Blocking (IDF-ligh
- Domain-Gate: Domain (100) zählt nur, wenn Name >= MIN_NAME_FOR_DOMAIN (70) ODER (City & Country) matchen
- Location-Penalties: City-Mismatch -30, Country-Mismatch -40 (nur wenn Felder befüllt)
- Name-Scoring: max(token_set, partial, token_sort) auf bereinigten Tokens (Stopwörter + City-Tokens)
- City-Bias-Guard: City-only Overlap -> Name-Score Cap auf 70
- Rare-Token-Check (IDF-light): Name-only-Matches brauchen seltenen Token-Overlap
- Weak-Threshold: 95, wenn weder Domain_used noch (City & Country) matchen
- Smart Blocking: Domain-Index -> seltenster Token -> Prefilter (partial>=70, Top 30, nur wenn seltenster Token im Kandidaten vorkommt)
- SerpAPI: nur für Matching-Accounts und nur wenn B/E leer; schreibt „Gefundene Website“ + „Serp Vertrauen“, Domain-100 nur bei Vertrauen=hoch
- Output: neue Spalten „Gefundene Website“, „Serp Vertrauen“, „Match“, „Score“, „Match_Grund“
- Writeback: SAFE (alle Originalspalten), interne Felder werden gedroppt + CSV-Backup
- Logging: Log/{timestamp}_duplicate_check_v2.15.txt, Summary-Metriken am Ende
2025-08-08 07:40:50 +00:00
da55159cb5 duplicate_checker.py aktualisiert 2025-08-08 06:35:24 +00:00
bb7710d8a1 duplicate_checker.py aktualisiert 2025-08-08 06:31:57 +00:00
2a7d546713 feat(duplicate-checker): quality-first Matching (Domain-Gate, Location-Penalties, Smart Blocking)
- Domain-Gate: Domain-Score (100) nur, wenn Name >= MIN_NAME_FOR_DOMAIN (default 70) ODER Ort+Land exakt matchen
- Location-Penalties: City-Mismatch -30, Country-Mismatch -40 (wenn Felder befüllt)
- Smart Blocking: Domain-Index -> seltenster Name-Token (Stopwörter gefiltert) -> Prefilter (partial_ratio >= 60, Top 50)
- Name-Score: max(token_set_ratio, partial_ratio, token_sort_ratio) + Name-only Bonus (+20) bei starken Namen
- SerpAPI nur für Matching-Accounts: schreibt "Gefundene Website"; Domain wird NUR bei Vertrauen=hoch genutzt
- Serp-Trust: hoch/mittel/niedrig (Token-Check gegen Domain)
- Transparenz: neue Spalten "Match", "Score", "Match_Grund", "Gefundene Website", "Serp Vertrauen"
- Safe Writeback: Originalspalten bleiben erhalten; interne Felder werden vor Write entfernt
- Logs: Log/{$timestamp}_duplicate_check_v2.13.txt, Summary-Metriken am Ende
- Backup: Log/{$timestamp}_backup_Matching_Accounts.csv

BREAKING CHANGES: none
2025-08-08 06:28:35 +00:00
07630e4de1 duplicate_checker.py aktualisiert 2025-08-08 06:11:37 +00:00
526302c96f duplicate_checker.py aktualisiert 2025-08-08 06:07:04 +00:00
0ecf8aa9f4 duplicate_checker.py aktualisiert 2025-08-08 06:00:19 +00:00
ec4fc642ff url_check nur für matching 2025-08-08 05:43:45 +00:00
d607e442f1 url check ergänzt 2025-08-08 05:34:32 +00:00
6b7d321811 duplicate_checker.py aktualisiert 2025-08-06 14:04:03 +00:00
6e5e4364c0 duplicate_checker.py aktualisiert 2025-08-06 13:50:38 +00:00
7263755f83 duplicate_checker.py aktualisiert 2025-08-06 13:39:30 +00:00
3f8a05f349 duplicate_checker.py aktualisiert 2025-08-06 13:35:25 +00:00
9362c47ab7 duplicate_checker.py aktualisiert 2025-08-06 13:28:50 +00:00
e11b96aee3 duplicate_checker.py aktualisiert 2025-08-06 13:19:44 +00:00
f890eebaa1 duplicate_checker.py aktualisiert 2025-08-06 13:11:09 +00:00
39016bff94 duplicate_checker.py aktualisiert 2025-08-06 12:50:12 +00:00
33c4ee187a duplicate_checker.py aktualisiert 2025-08-06 12:42:02 +00:00
97b640fff5 duplicate_checker.py aktualisiert 2025-08-06 11:37:35 +00:00
1d8a067746 duplicate_checker.py aktualisiert 2025-08-06 10:32:38 +00:00
722fd8fb9a Add Logging 2025-08-06 09:31:33 +00:00
555d9dcbfc duplicate_checker.py aktualisiert 2025-08-06 09:08:12 +00:00
42e09ed7ad duplicate_checker.py aktualisiert 2025-08-06 09:07:10 +00:00
1c55039404 duplicate_checker.py aktualisiert 2025-08-06 09:06:07 +00:00
8cf8929308 duplicate_checker.py aktualisiert 2025-08-06 05:59:05 +00:00
f96ceb65f9 duplicate_checker.py aktualisiert 2025-08-06 05:45:15 +00:00
dedb647e19 duplicate_checker.py aktualisiert 2025-08-05 15:54:08 +00:00
6cf123d98e duplicate_checker.py aktualisiert 2025-08-05 14:38:52 +00:00
4cb3e12c21 duplicate_checker.py aktualisiert 2025-08-05 14:36:25 +00:00
0bdea85563 duplicate_checker.py aktualisiert 2025-08-05 14:34:08 +00:00
a933423638 duplicate_checker.py aktualisiert 2025-08-05 14:30:02 +00:00
dc8c338b96 chat GPT version 2025-08-05 14:27:07 +00:00
012217f359 duplicate_checker.py aktualisiert 2025-08-04 06:08:27 +00:00