|
|
<!DOCTYPE html>
|
|
|
<html lang="en">
|
|
|
<head>
|
|
|
<meta charset="UTF-8"/>
|
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
|
|
|
<title>Stroke Risk Predictor</title>
|
|
|
<link rel="stylesheet" href="/static/style.css"/>
|
|
|
</head>
|
|
|
<body>
|
|
|
<div class="container">
|
|
|
<h1>π Stroke Risk Predictor</h1>
|
|
|
<p>Enter patient details and get a predicted stroke probability.</p>
|
|
|
|
|
|
{% if error %}
|
|
|
<div class="error">{{ error }}</div>
|
|
|
{% endif %}
|
|
|
|
|
|
<form method="POST" action="/predict" class="card">
|
|
|
<div class="row">
|
|
|
<label>Gender</label>
|
|
|
<select name="gender">
|
|
|
{% for g in ["Male","Female","Other"] %}
|
|
|
<option value="{{g}}" {% if defaults.gender==g %}selected{% endif %}>{{g}}</option>
|
|
|
{% endfor %}
|
|
|
</select>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
<label>Age</label>
|
|
|
<input type="number" name="age" step="1" min="0" max="120" value="{{defaults.age}}"/>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
<label>Hypertension</label>
|
|
|
<select name="hypertension">
|
|
|
{% for v in [0,1] %}
|
|
|
<option value="{{v}}" {% if defaults.hypertension==v %}selected{% endif %}>{{v}}</option>
|
|
|
{% endfor %}
|
|
|
</select>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
<label>Heart Disease</label>
|
|
|
<select name="heart_disease">
|
|
|
{% for v in [0,1] %}
|
|
|
<option value="{{v}}" {% if defaults.heart_disease==v %}selected{% endif %}>{{v}}</option>
|
|
|
{% endfor %}
|
|
|
</select>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
<label>Ever Married</label>
|
|
|
<select name="ever_married">
|
|
|
{% for v in ["Yes","No"] %}
|
|
|
<option value="{{v}}" {% if defaults.ever_married==v %}selected{% endif %}>{{v}}</option>
|
|
|
{% endfor %}
|
|
|
</select>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
<label>Work Type</label>
|
|
|
<select name="work_type">
|
|
|
{% for v in ["Private","Self-employed","Govt_job","children","Never_worked"] %}
|
|
|
<option value="{{v}}" {% if defaults.work_type==v %}selected{% endif %}>{{v}}</option>
|
|
|
{% endfor %}
|
|
|
</select>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
<label>Residence Type</label>
|
|
|
<select name="Residence_type">
|
|
|
{% for v in ["Urban","Rural"] %}
|
|
|
<option value="{{v}}" {% if defaults.Residence_type==v %}selected{% endif %}>{{v}}</option>
|
|
|
{% endfor %}
|
|
|
</select>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
<label>Avg. Glucose Level</label>
|
|
|
<input type="number" name="avg_glucose_level" step="0.01" value="{{defaults.avg_glucose_level}}"/>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
<label>BMI</label>
|
|
|
<input type="number" name="bmi" step="0.1" value="{{defaults.bmi}}"/>
|
|
|
</div>
|
|
|
|
|
|
<div class="row">
|
|
|
<label>Smoking Status</label>
|
|
|
<select name="smoking_status">
|
|
|
{% for v in ["formerly smoked","never smoked","smokes","Unknown"] %}
|
|
|
<option value="{{v}}" {% if defaults.smoking_status==v %}selected{% endif %}>{{v}}</option>
|
|
|
{% endfor %}
|
|
|
</select>
|
|
|
</div>
|
|
|
|
|
|
<button type="submit">Predict</button>
|
|
|
</form>
|
|
|
|
|
|
{% if result %}
|
|
|
<div class="result card">
|
|
|
<h2>Result</h2>
|
|
|
<p><strong>Predicted Stroke Probability:</strong> {{ '%.3f'|format(result.stroke_probability) }}</p>
|
|
|
<p><strong>Predicted Label (1 = Stroke):</strong> {{ result.predicted_label }}</p>
|
|
|
</div>
|
|
|
{% endif %}
|
|
|
|
|
|
<div class="api card">
|
|
|
<h3>API</h3>
|
|
|
<code>POST /predict</code> with JSON:
|
|
|
<pre>
|
|
|
{
|
|
|
"gender":"Female",
|
|
|
"age":45,
|
|
|
"hypertension":0,
|
|
|
"heart_disease":0,
|
|
|
"ever_married":"Yes",
|
|
|
"work_type":"Private",
|
|
|
"Residence_type":"Urban",
|
|
|
"avg_glucose_level":95.0,
|
|
|
"bmi":28.0,
|
|
|
"smoking_status":"never smoked"
|
|
|
}
|
|
|
</pre>
|
|
|
</div>
|
|
|
</div>
|
|
|
</body>
|
|
|
</html>
|
|
|
|