import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.inspection import permutation_importance
from sklearn.metrics import average_precision_score
df = pd.read_csv("lots.csv", parse_dates=["time"]).sort_values("time")
features = ["temp", "pressure", "speed", "humidity"]
cut = int(len(df) * 0.8) # 前 80% 訓練,後 20% 驗證,不能隨機切
train, test = df.iloc[:cut], df.iloc[cut:]
model = RandomForestClassifier(n_estimators=300, min_samples_leaf=5, class_weight="balanced", random_state=0)
model.fit(train[features], train["defect"])
base = test["defect"].mean()
score = average_precision_score(test["defect"], model.predict_proba(test[features])[:, 1])
print(f"不良率基準 {base:.3f},模型 AP {score:.3f}")
imp = permutation_importance(model, test[features], test["defect"], scoring="average_precision", n_repeats=20, random_state=0)
print(pd.Series(imp.importances_mean, index=features).sort_values(ascending=False).round(3))