SniperGold_ML/ml/p3/smc_semantic/probe_state.py

56 lines
2.1 KiB
Python

# -*- coding: utf-8 -*-
"""Probe cepat: distribusi state f7/f10/f11 + state age (verifikasi NEG pool = 0)."""
import sys
import numpy as np
import datetime as dt
sys.path.insert(0, ".")
import smc_semantic_common as SC
t, o, h, l, c, v, htf = SC.load_data()
F = SC.load_F()
f7, f10, f11 = F[:, 7].astype(int), F[:, 10].astype(int), F[:, 11].astype(int)
n = len(f7)
lines = []
lines.append("n=%d" % n)
lines.append("f7!=0 : %d (%.2f%%)" % (int((f7 != 0).sum()), 100 * (f7 != 0).mean()))
lines.append("f10==1: %d (%.2f%%)" % (int((f10 == 1).sum()), 100 * (f10 == 1).mean()))
lines.append("f11==1: %d (%.2f%%)" % (int((f11 == 1).sum()), 100 * (f11 == 1).mean()))
lines.append("none : %d (%.2f%%)" % (int(((f7 == 0) & (f10 == 0) & (f11 == 0)).sum()),
100 * ((f7 == 0) & (f10 == 0) & (f11 == 0)).mean()))
sw_full, inn_full = SC.build_structures(o, h, l, c)
sd, sb = SC.sweep_state(h, l, c, inn_full["pivots"])
lines.append("unique grab bars: %d" % len(np.unique(sb[sb >= 0])))
age = np.where(sb >= 0, np.arange(n) - sb, -1)
lines.append("age>=0 frac: %.4f" % float((age >= 0).mean()))
lines.append("age<8 frac: %.4f" % float(((age >= 0) & (age < 8)).mean()))
lines.append("age8-15 : %.4f" % float(((age >= 8) & (age < 16)).mean()))
lines.append("age16-39 : %.4f" % float(((age >= 16) & (age < 40)).mean()))
lines.append("age>=40 : %.4f" % float((age >= 40).mean()))
# run-length f7 state
runs = []
cur, ln = f7[0], 1
for i in range(1, n):
if f7[i] == cur:
ln += 1
else:
if cur != 0:
runs.append(ln)
cur, ln = f7[i], 1
if cur != 0:
runs.append(ln)
runs = np.array(runs)
lines.append("f7 state runs: n=%d median=%d max=%d" % (len(runs),
int(np.median(runs)) if len(runs) else -1,
int(runs.max()) if len(runs) else -1))
# distribusi age pada saat f7 aktif
age_pos = age[(f7 != 0) & (age >= 0)]
lines.append("f7-active age: median=%d p90=%d max=%d" % (
int(np.median(age_pos)), int(np.percentile(age_pos, 90)), int(age_pos.max())))
open("output/_probe_state.txt", "w").write("\n".join(lines))
print("probe done")