File size: 2,294 Bytes
b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace 7866f05 b4a8ace |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
from fastapi import FastAPI, Request, HTTPException
import numpy as np
import joblib
app = FastAPI()
# Simple risk level function
def get_risk_level(probability):
if probability < 0.2:
return "Very Low Risk"
elif probability < 0.4:
return "Low Risk"
elif probability < 0.6:
return "Moderate Risk"
elif probability < 0.8:
return "High Risk"
else:
return "Very High Risk"
# Fallback prediction
def predict_risk(data):
# Count risk factors
risk_factors = 0
if data.get('hypertension', 0) == 1:
risk_factors += 1
if data.get('heart_disease', 0) == 1:
risk_factors += 1
if data.get('age', 0) > 65:
risk_factors += 1
if data.get('smoking_status', '') == 'smokes':
risk_factors += 1
if data.get('avg_glucose_level', 0) > 140:
risk_factors += 1
if data.get('bmi', 0) > 30:
risk_factors += 1
# Simple logic based on risk factor count
if risk_factors == 0:
probability = 0.05
elif risk_factors == 1:
probability = 0.15
elif risk_factors == 2:
probability = 0.30
elif risk_factors == 3:
probability = 0.60
else:
probability = 0.80
return probability, get_risk_level(probability)
@app.get("/")
async def root():
return {
"message": "Stroke Prediction API is running",
"usage": "Send a POST request to / with patient data",
"example": {
"gender": "Male",
"age": 67,
"hypertension": 1,
"heart_disease": 0,
"avg_glucose_level": 228.69,
"bmi": 36.6,
"smoking_status": "formerly smoked"
}
}
@app.post("/")
async def predict(request: Request):
try:
data = await request.json()
# Use fallback prediction
probability, risk_level = predict_risk(data)
return {
"probability": float(probability),
"prediction": risk_level,
"stroke_prediction": int(probability > 0.5)
}
except Exception as e:
raise HTTPException(status_code=400, detail=f"Invalid input: {str(e)}") |