MIF_E31232406/ml/predict.py

71 lines
1.6 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))
score = 0
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
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():
"""
Prioritas baca:
1) STDIN (kalau ada)
2) argv[1] (kalau ada)
"""
try:
# Coba baca dari STDIN
if not sys.stdin.isatty():
raw = sys.stdin.read().strip()
if raw:
return json.loads(raw)
except:
pass
# Fallback ke argv
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)