File size: 2,494 Bytes
e103010
 
 
 
 
 
 
 
 
 
756dbf1
 
 
e103010
756dbf1
e103010
 
 
 
756dbf1
 
e103010
756dbf1
 
 
 
 
 
 
e103010
 
 
 
 
 
 
 
 
 
 
756dbf1
 
e103010
 
 
 
 
 
 
 
756dbf1
e103010
 
 
 
 
 
 
756dbf1
 
e103010
 
 
 
 
 
 
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
import gradio as gr
import xgboost as xgb
import numpy as np
import pickle
import json
import requests

# Load pre-trained model
model = pickle.load(open("lapse_model.pkl", "rb"))

# Salesforce (Optional - replace with your actual endpoint and secure token handling!)
SALESFORCE_ENDPOINT = "https://orgfarm-ac78ff910d-dev-ed.develop.lightning.force.com/services/data/vXX.0/sobjects/Lapse_Risk__c/"
SALESFORCE_AUTH_TOKEN = "Bearer YOUR_SALESFORCE_TOKEN"  # Use environment variable in production!

def predict_lapse(policy_id, last_premium_paid_date, payment_mode, policy_term, policy_age, communication_score):
    # Map payment_mode to numeric
    payment_map = {"Annual": 0, "Semi-Annual": 1, "Quarterly": 2, "Monthly": 3}
    payment_encoded = payment_map.get(payment_mode, 0)

    # Create feature array with 4 features
    features = np.array([[policy_term, policy_age, payment_encoded, communication_score]])

    # Predict lapse risk
    try:
        risk_score = model.predict_proba(features)[0][1]
    except Exception as e:
        return f"Prediction failed: {e}"

    # OPTIONAL: Send to Salesforce
    try:
        headers = {
            "Authorization": SALESFORCE_AUTH_TOKEN,
            "Content-Type": "application/json"
        }
        data = {
            "Name": policy_id,
            "Lapse_Risk_Score__c": risk_score,
            "Last_Paid_Date__c": last_premium_paid_date,
            "Premium_Payment_Mode__c": payment_mode,
            "Policy_Term__c": policy_term,
            "Policy_Age__c": policy_age,
            "Communication_Score__c": communication_score
        }
        response = requests.post(SALESFORCE_ENDPOINT, json=data, headers=headers)
        print("Salesforce Response:", response.status_code, response.text)
    except Exception as e:
        print("Salesforce Integration Error:", e)

    return round(risk_score, 3)

# Gradio UI
demo = gr.Interface(
    fn=predict_lapse,
    inputs=[
        gr.Text(label="Policy ID"),
        gr.Text(label="Last Premium Paid Date (YYYY-MM-DD)"),
        gr.Dropdown(["Annual", "Semi-Annual", "Quarterly", "Monthly"], label="Payment Mode"),
        gr.Number(label="Policy Term (Years)"),
        gr.Number(label="Policy Age (Years)"),
        gr.Slider(0, 1, step=0.01, label="Communication Score (0 to 1)")
    ],
    outputs=gr.Number(label="Lapse Risk Score (0 - 1)"),
    title="Lapse Risk Predictor",
    description="Predict the likelihood of policy lapse using XGBoost model"
)

demo.launch()