y, test_size=0.2, random_state=42) rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_train, y_train) # Permutation importance pada TEST set (lebih jujur) perm_test = permutation_importance(rf, X_test, y_test, n_repeats=30, random_state=42) perm_df = pd.DataFrame({ 'feature': X.columns, 'importance_mean': perm_test.importances_mean, 'importance_std': perm_test.importances_std }).sort_values('importance_mean', ascending=False) fig, ax = plt.subplots(figsize=(10, 8)) ax.barh( perm_df['feature'].head(15), perm_df['importance_mean'].head(15), xerr=perm_df['importance_std'].head(15), color='steelblue', capsize=4 ) ax.invert_yaxis() ax.set_xlabel('Penurunan Accuracy saat Fitur Diacak') ax.set_title('Permutation Importance (Test Set) dengan Confidence Interval') plt.tight_layout() plt.show() # Implementasi manual untuk pemahaman mendalam def permutation_importance_manual(model, X, y, metric, n_repeats=10): baseline = metric(y, model.predict(X)) importances = {} for col in X.columns: scores = [] for _ in range(n_repeats): X_permuted = X.copy() X_permuted[col] = np.random.permutation(X_permuted[col].values) scores.append(baseline - metric(y, model.predict(X_permuted))) importances[col] = np.mean(scores) return pd.Series(importances).sort_values(ascending=False) from sklearn.metrics import accuracy_score manual_imp = permutation_importance_manual(rf, X_test, y_test, accuracy_score) print(manual_imp.head(10))