Files
hiffi-artist-intelligence/update_ranking_and_anomalies.py
T

56 lines
1.8 KiB
Python
Raw Normal View History

"""
update_ranking_and_anomalies.py
Synchronizes all multi-platform metrics through HIFFIRankingEngine.
Re-computes XP scores, dynamic weights, statistical anomaly flags, and published ranks.
"""
from pathlib import Path
import pandas as pd
from core.ranking_engine import HIFFIRankingEngine
DATA_PATH = Path("data/hiffi_multiplatform_500.csv")
def run_ranking_update():
if not DATA_PATH.exists():
print(f"File not found: {DATA_PATH}")
return
df = pd.read_csv(DATA_PATH)
print(f"Loaded master dataset with {len(df)} artists.")
engine = HIFFIRankingEngine()
print("[1/4] Calculating baseline production rankings...")
df = engine.score_and_rank(df)
print("[2/4] Computing HIFFI-XP composite scores & dynamic weight redistribution...")
df = engine.calculate_hiffi_xp(df)
print("[3/4] Running statistical anomaly detection...")
df = engine.detect_metric_anomalies(df)
print("[4/4] Applying publication eligibility gates & tier constraints...")
df = engine.apply_publication_eligibility_gates(df)
# Clean display types
if "hiffi_xp_published_rank" in df.columns:
df["hiffi_xp_published_rank"] = df["hiffi_xp_published_rank"].astype(int)
df.to_csv(DATA_PATH, index=False)
anomaly_counts = (df["anomaly_flags"] != "CLEAN").sum()
tier_counts = df["platform_evidence_tier"].value_counts().to_dict()
print("\n==========================================")
print("Multi-Platform Ranking & Anomaly Sync Complete!")
print(f"Evidence Tiers Distribution: {tier_counts}")
print(f"Statistical Anomalies Detected: {anomaly_counts} (Auditable Outliers)")
print(f"Clean Normal Records: {len(df) - anomaly_counts}")
print(f"Master CSV updated: {DATA_PATH}")
print("==========================================")
if __name__ == "__main__":
run_ranking_update()