Space-Risk-Intelligence-API / app /scripts /train_baseline.py
Adisri99's picture
Upload 26 files
1ce499f verified
import json, random
import numpy as np, pandas as pd
from sklearn.metrics import roc_auc_score
from app.database import SessionLocal
from app.repository import list_objects
from app.feature_engineering import FEATURE_COLUMNS, combine_features
from app.graph_features import build_graph, pair_graph_features
from app.ml import train_models
def run_training():
db=SessionLocal()
try:
objs=list_objects(db,5000); objects=[{"object_id":o.object_id,"object_type":o.object_type,"mean_motion":o.mean_motion,"inclination":o.inclination,"eccentricity":o.eccentricity,"raan":o.raan,"bstar":o.bstar,"launch_year":o.launch_year} for o in objs]
finally: db.close()
pairs=[tuple(random.sample(objects,2)) for _ in range(4000)]; g=build_graph([(a["object_id"],b["object_id"]) for a,b in pairs[:1000]]); rows=[]; raw_scores=[]
for a,b in pairs:
trend={"recurrence_count":float(random.choice([0,1,2,3,4])),"trend_delta_score":float(random.uniform(-0.1,0.3)),"score_volatility_proxy":float(random.uniform(0,0.2))}
f=combine_features(a,b,trend,pair_graph_features(g,a["object_id"],b["object_id"]))
score=0.30*f["close_approach_proxy"]+0.16*f["same_shell"]+0.10*min(1.0,f["shell_density_proxy"]/12.0)+0.10*min(1.0,f["graph_local_density"]*2.0)+0.09*min(1.0,f["graph_jaccard"])+0.10*min(1.0,f["recurrence_count"]/5.0)+0.08*max(0.0,f["trend_delta_score"])+np.random.normal(0,0.05)
y=1 if score>0.48 else 0; rows.append({**f,"label":y}); raw_scores.append(score)
df=pd.DataFrame(rows); path=train_models(df[FEATURE_COLUMNS].values, df["label"].values); auc=float(roc_auc_score(df["label"].values, np.array(raw_scores)))
return path, len(df), {"pseudo_auc":round(auc,4),"rows":int(len(df))}
if __name__=="__main__":
p,r,m=run_training(); print(json.dumps({"model_path":p,"rows":r,"metrics":m}, indent=2))