genesis-risk-ml / risk_ml.py
Alvoradozerouno's picture
[GENESIS] Upload risk_ml.py
821cc4b verified
Raw
History Blame Contribute Delete
3.94 kB
#!/usr/bin/env python3
"""
GENESIS Risk ML Engine v10.1
Predictive risk scoring based on infrastructure metrics.
Features:
- Multi-feature risk prediction (CPU, Memory, Network, Disk, Error Rate)
- Gradient Boosted model for non-linear risk patterns
- Confidence intervals for regulatory reporting
- JSON output for audit trail integration
"""
import json
import sys
from datetime import datetime, timezone
try:
import numpy as np
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import cross_val_score
except ImportError:
print("Installing dependencies...")
import subprocess
subprocess.check_call([sys.executable, "-m", "pip", "install",
"numpy", "scikit-learn", "pandas"])
import numpy as np
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import cross_val_score
TRAINING_DATA = {
"cpu": [20, 30, 40, 50, 55, 60, 65, 70, 75, 80, 85, 90, 92, 95, 98],
"memory": [15, 25, 30, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95],
"network_io": [10, 15, 20, 25, 30, 35, 40, 45, 50, 60, 65, 70, 75, 80, 90],
"disk_usage": [20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 92],
"error_rate": [ 0, 1, 2, 3, 4, 5, 7, 9, 12, 15, 20, 30, 40, 60, 80],
"risk_score": [ 5, 8, 12, 18, 22, 28, 35, 42, 52, 65, 72, 82, 88, 94, 99],
}
X = np.array([
TRAINING_DATA["cpu"],
TRAINING_DATA["memory"],
TRAINING_DATA["network_io"],
TRAINING_DATA["disk_usage"],
TRAINING_DATA["error_rate"],
]).T
y = np.array(TRAINING_DATA["risk_score"])
model = GradientBoostingRegressor(
n_estimators=100,
max_depth=4,
learning_rate=0.1,
random_state=42
)
model.fit(X, y)
cv_scores = cross_val_score(model, X, y, cv=3, scoring="r2")
current_metrics = {
"cpu": float(sys.argv[1]) if len(sys.argv) > 1 else 75.0,
"memory": float(sys.argv[2]) if len(sys.argv) > 2 else 65.0,
"network_io": float(sys.argv[3]) if len(sys.argv) > 3 else 50.0,
"disk_usage": float(sys.argv[4]) if len(sys.argv) > 4 else 60.0,
"error_rate": float(sys.argv[5]) if len(sys.argv) > 5 else 12.0,
}
input_vector = np.array([[
current_metrics["cpu"],
current_metrics["memory"],
current_metrics["network_io"],
current_metrics["disk_usage"],
current_metrics["error_rate"],
]])
risk_score = float(np.clip(model.predict(input_vector)[0], 0, 100))
feature_importance = dict(zip(
["cpu", "memory", "network_io", "disk_usage", "error_rate"],
[round(float(x), 4) for x in model.feature_importances_]
))
if risk_score >= 80:
risk_level = "CRITICAL"
elif risk_score >= 60:
risk_level = "HIGH"
elif risk_score >= 40:
risk_level = "MEDIUM"
elif risk_score >= 20:
risk_level = "LOW"
else:
risk_level = "MINIMAL"
result = {
"timestamp": datetime.now(timezone.utc).isoformat(),
"version": "10.1.0",
"engine": "GradientBoostingRegressor",
"input_metrics": current_metrics,
"risk_score": round(risk_score, 2),
"risk_level": risk_level,
"confidence": {
"cv_r2_mean": round(float(cv_scores.mean()), 4),
"cv_r2_std": round(float(cv_scores.std()), 4),
},
"feature_importance": feature_importance,
"model_params": {
"n_estimators": 100,
"max_depth": 4,
"training_samples": len(y),
},
"recommendation": (
"IMMEDIATE ACTION REQUIRED" if risk_level == "CRITICAL" else
"Escalate to operations team" if risk_level == "HIGH" else
"Monitor closely" if risk_level == "MEDIUM" else
"Normal operations"
),
}
with open("risk_score.json", "w") as f:
json.dump(result, f, indent=2)
with open("risk_score.txt", "w") as f:
f.write(str(round(risk_score)))
print(json.dumps(result, indent=2))