MIF_E31232406/ml/predict.py

84 lines
2.1 KiB
Python

import json
import sys
def predict(data):
pekerjaan = str(data.get("pekerjaan", "")).lower()
penghasilan = float(data.get("penghasilan", 0))
tanggungan = int(data.get("jumlah_tanggungan", 0))
aset = str(data.get("aset_kepemilikan", "")).lower()
bantuan_lain = str(data.get("bantuan_lain", "")).lower()
usia = int(data.get("usia", 0))
kondisi_rumah = str(data.get("kondisi_rumah", "")).lower()
meteran_listrik= str(data.get("meteran_listrik", "")).lower()
sumber_air = str(data.get("sumber_air", "")).lower()
score = 0
# Parameter lama (tidak diubah)
if pekerjaan in ["buruh", "tidak bekerja", "petani", "nelayan"]:
score += 0.2
if penghasilan < 1000000:
score += 0.3
elif penghasilan < 2000000:
score += 0.2
if tanggungan >= 4:
score += 0.2
if "mobil" in aset:
score -= 0.2
if bantuan_lain == "ya":
score -= 0.1
if usia >= 60:
score += 0.1
# Parameter baru
if kondisi_rumah == "tidak layak":
score += 0.15
elif kondisi_rumah == "sedang":
score += 0.05
if meteran_listrik == "450va":
score += 0.1
elif meteran_listrik == "900va":
score += 0.05
if sumber_air == "sungai":
score += 0.1
elif sumber_air == "sumur":
score += 0.05
probability = max(0, min(score, 1))
recommendation = "Layak" if probability >= 0.5 else "Tidak Layak"
return {
"probability": round(probability, 4),
"recommendation": recommendation
}
def read_input():
try:
if not sys.stdin.isatty():
raw = sys.stdin.read().strip()
if raw:
return json.loads(raw)
except:
pass
if len(sys.argv) > 1:
raw = sys.argv[1]
return json.loads(raw)
raise ValueError("No JSON input provided")
if __name__ == "__main__":
try:
data = read_input()
result = predict(data)
print(json.dumps(result))
except Exception as e:
print(json.dumps({"error": str(e)}))
sys.exit(1)