churn-predictor / utils.py
pinge's picture
Added files
8f39cdb
import plotly.graph_objects as go
def create_guage_chart(probability):
if probability > 0.3:
color = 'green'
elif probability < 0.6:
color = 'yellow'
else:
color = 'red'
fig = go.Figure(
go.Indicator(
mode = "gauge+number",
value = probability * 100,
domain = {'x': [0, 1], 'y': [0, 1]},
title = {'text': "Churn Probability", 'font': {'size': 24, 'color': 'white'}},
number = {'font': {'size': 40, 'color': 'white'}},
gauge = {
'axis': {
'tickwidth': 1,
'range': [0, 100],
'tickcolor': 'white',
},
'bar': {'color': color},
'bgcolor': 'rgba(0,0,0,0)',
'borderwidth': 2,
'bordercolor': 'white',
'steps': [
{'range': [0, 30], 'color': 'rgba(0,255,0,0.3)'},
{'range': [30, 60], 'color': 'rgba(255,255,0,0.3)'},
{'range': [60, 100], 'color': 'rgba(255,0,0,0.3)'}
],
'threshold': {
'line': {'color': 'white', 'width': 4},
'thickness': 0.75,
'value': 100
}
}
)
)
fig.update_layout(
paper_bgcolor = 'rgba(0,0,0,0)',
plot_bgcolor = 'rgba(0,0,0,0)',
font = {'color': 'white'},
width = 400,
height = 300,
margin = dict(l=20, r=20, t=50, b=20)
)
return fig
def create_model_probability_chart(probabilities):
models = list(probabilities.keys())
probs = list(probabilities.values())
fig = go.Figure(
data = [
go.Bar(
y=models,
x=probs,
orientation='h',
text=[f'{p:.2f}%' for p in probs],
textposition='auto',
)
]
)
fig.update_layout(
title = 'Churn Probabilities by Model',
yaxis_title = 'Models',
xaxis_title = 'Churn Probability',
xaxis = dict(tickformat='.0%', range=[0, 1]),
height = 400,
margin = dict(l=20, r=20, t=40, b=20)
)
return fig