fix(prediction): match_ais_to_registry 대상을 전체 중국 선박으로 확장 (A-2 핵심 버그)
버그: all_ais 를 vessel_dfs(classification 통과 500척)만 대상으로 구성 → 허가선 906척 중 실제 AIS 존재 866척(upper bound 95.8%) 임에도 매칭률 9.4% 에 머물렀던 진짜 원인. 수정: vessel_store._tracks 전체에서 중국 MID(412/413/414) 활성 선박을 대상으로 match_ais_to_registry 호출. 매칭률 upper bound 95.8% 까지 회복 기대. 검증: 이번 AIS 실제 샘플 조사로 판명: - AIS 고유 정규화 이름 411,908 개 - 허가선 정규화 이름 904 개 - 교집합 866 개 (95.8%) → 정규화 로직은 정상 작동. 문제는 호출 범위였음.
This commit is contained in:
부모
535704707b
커밋
7314c7f65f
@ -131,16 +131,26 @@ def run_analysis_cycle():
|
||||
with kcgdb.get_conn() as kcg_conn:
|
||||
fleet_tracker.load_registry(kcg_conn)
|
||||
|
||||
# 등록 선단 매칭은 classification 통과자(500척) 만이 아닌
|
||||
# 전체 중국 MID(412/413/414) 활성 선박을 대상으로 한다.
|
||||
# vessel_dfs 에만 돌리면 허가선 906척 중 95% AIS 존재에도 매칭률이 크게 낮아짐.
|
||||
all_ais = []
|
||||
for mmsi, df in vessel_dfs.items():
|
||||
if len(df) > 0:
|
||||
last = df.iloc[-1]
|
||||
all_ais.append({
|
||||
'mmsi': mmsi,
|
||||
'name': vessel_store.get_vessel_info(mmsi).get('name', ''),
|
||||
'lat': float(last['lat']),
|
||||
'lon': float(last['lon']),
|
||||
})
|
||||
all_tracks = getattr(vessel_store, '_tracks', {}) or vessel_dfs
|
||||
for mmsi, df in all_tracks.items():
|
||||
if not (mmsi.startswith('412') or mmsi.startswith('413') or mmsi.startswith('414')):
|
||||
continue
|
||||
if df is None or len(df) == 0:
|
||||
continue
|
||||
name = vessel_store.get_vessel_info(mmsi).get('name', '')
|
||||
if not name:
|
||||
continue
|
||||
last = df.iloc[-1]
|
||||
all_ais.append({
|
||||
'mmsi': mmsi,
|
||||
'name': name,
|
||||
'lat': float(last['lat']),
|
||||
'lon': float(last['lon']),
|
||||
})
|
||||
|
||||
fleet_tracker.match_ais_to_registry(all_ais, kcg_conn)
|
||||
|
||||
|
||||
불러오는 중...
Reference in New Issue
Block a user