scaai / app.py
AdeshJain's picture
Upload app.py
24dedd0 verified
from fastapi import FastAPI
from pydantic import BaseModel
import pandas as pd
import joblib
import os
import requests
MODEL_URL = "https://huggingface.co/adeshjain/model1/resolve/main/model_j.joblib"
SCALER_URL = "https://huggingface.co/adeshjain/model1/resolve/main/scaler_j.joblib"
def download_file(url, filename):
path = os.path.join("/tmp", filename)
if not os.path.exists(path):
r = requests.get(url)
r.raise_for_status()
with open(path, "wb") as f:
f.write(r.content)
return path
model = joblib.load(download_file(MODEL_URL, "model_j.joblib"))
scaler = joblib.load(download_file(SCALER_URL, "scaler_j.joblib"))
class ClaimData(BaseModel):
OPAnnualReimbursementAmt: float
OPAnnualDeductibleAmt: float
DeductibleAmtPaid: float
claim: float
period: float
phy_same: float
Gender_1: float
Gender_2: float
RenalDiseaseIndicator: float
age: float
alife: float
Provider: float
NoOfMonths_PartACov: float
NoOfMonths_PartBCov: float
ChronicCond_Alzheimer: float
ChronicCond_KidneyDisease: float
ChronicCond_Cancer: float
ChronicCond_ObstrPulmonary: float
ChronicCond_Depression: float
ChronicCond_Diabetes: float
ChronicCond_IschemicHeart: float
ChronicCond_stroke: float
IPAnnualReimbursementAmt: float
app = FastAPI(title="Medicare Fraud Prediction API")
@app.post("/predict")
def predict_fraud(data: ClaimData):
# Convert input to DataFrame
df = pd.DataFrame([data.dict()])
# Scale only the relevant columns
columns_to_scale = ['OPAnnualReimbursementAmt','OPAnnualDeductibleAmt','DeductibleAmtPaid']
df[columns_to_scale] = scaler.transform(df[columns_to_scale])
# Predict
pred = model.predict(df)[0]
result = "Fraud" if pred == 1 else "Not Fraud"
return {"prediction": result}
@app.get("/")
def root():
return {"message": "working"}