File size: 2,162 Bytes
8e3dcf0
c9eaabd
 
 
 
 
 
 
 
 
 
 
cee6701
c9eaabd
 
 
 
8e3dcf0
c9eaabd
 
 
 
 
 
cee6701
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c9eaabd
 
cee6701
c9eaabd
cee6701
c9eaabd
 
cee6701
 
 
 
 
 
c9eaabd
cee6701
c9eaabd
 
cee6701
c9eaabd
cee6701
c9eaabd
cee6701
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
c9eaabd
 
cee6701
 
 
 
 
 
 
 
c9eaabd
 
cee6701
1fefc77
c9eaabd
 
 
cee6701
c9eaabd
cee6701
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# Importing libraries
import os
import uuid
import joblib
import json
import gradio as gr
import pandas as pd

from huggingface_hub import CommitScheduler
from pathlib import Path


# logging
log_file = Path("logs/") / f"data_{uuid.uuid4()}.json"
log_folder = log_file.parent

scheduler = CommitScheduler(
     repo_id="Insurance_Charge_Prediction_Project",
     repo_type="dataset",
     folder_path=log_folder,
     path_in_repo="data",
     every=2
 )

charges_predictor = joblib.load("model.joblib")


# Inputs

age_input = gr.Number(label="Age")
bmi_input = gr.Number(label="BMI")
children_input = gr.Number(label="Children")

sex_input = gr.Dropdown(
    ["male", "female"],
    label="Sex"
)

smoker_input = gr.Dropdown(
    ["yes", "no"],
    label="Smoker"
)

region_input = gr.Dropdown(
    ["southeast", "southwest", "northeast", "northwest"],
    label="Region"
)


model_output = gr.Textbox(label="Predicted Insurance Cost")


# prediction function

def predict_charges(age, bmi, children, sex, smoker, region):

    sample = {
        "age": age,
        "bmi": bmi,
        "children": children,
        "sex": sex,
        "smoker": smoker,
        "region": region
    }

    data_point = pd.DataFrame([sample])

    prediction = charges_predictor.predict(data_point).tolist()

    # logging
    with scheduler.lock:
        with log_file.open("a") as f:
            f.write(json.dumps({
                "age": age,
                "bmi": bmi,
                "children": children,
                "sex": sex,
                "smoker": smoker,
                "region": region,
                "prediction": prediction[0]
            }))
            f.write("\n")

    return f"${prediction[0]:,.2f}"


# UI

demo = gr.Interface(
    fn=predict_charges,
    inputs=[
        age_input,
        bmi_input,
        children_input,
        sex_input,
        smoker_input,
        region_input
    ],
    outputs=model_output,
    title="HealthyLife Insurance Charge Prediction",
    description="Predict the insurance medical charges based on patient information",
    flagging_mode="manual",
    concurrency_limit=8
)


demo.queue()
demo.launch()