Spaces:
Sleeping
Sleeping
import streamlit as st | |
import pandas as pd | |
import openai | |
import os | |
from dotenv import load_dotenv | |
# Load API key from .env | |
load_dotenv() | |
openai.api_key = os.getenv("OPENAI_API_KEY") | |
# Load CSV file | |
df = pd.read_csv('churn_predictions.csv') | |
# Streamlit UI | |
st.set_page_config(page_title="Customer Churn Chatbot") | |
st.title("Customer Churn Chatbot") | |
st.markdown("Ask if a customer is predicted to churn and get GPT-based suggestions.") | |
# Input fields | |
customer_id = st.text_input("Enter Customer ID (optional):") | |
customer_name = st.text_input("Enter Customer Name (optional):") | |
if st.button("Check Churn"): | |
result = pd.DataFrame() | |
# Search by ID | |
if customer_id: | |
try: | |
customer_id = int(customer_id) | |
result = df[df["CustomerId"] == customer_id] | |
except ValueError: | |
st.error("Customer ID must be an integer.") | |
# Search by name | |
elif customer_name: | |
result = df[df["Customer"].str.lower() == customer_name.lower()] | |
if not result.empty: | |
row = result.iloc[0] | |
churn = row["PredictedChurn"] | |
# Basic suggestion | |
suggestion = ( | |
"High risk of churn. Consider giving discounts, loyalty rewards." | |
if churn == 1 else | |
"Customer is stable. Maintain good service." | |
) | |
# GPT prompt | |
prompt = ( | |
f"Customer: {row['Customer']}\n" | |
f"Churn Prediction: {'Yes' if churn else 'No'}\n" | |
"What actions should be taken to reduce churn or maintain retention?" | |
) | |
with st.spinner("Asking GPT..."): | |
try: | |
response = openai.ChatCompletion.create( | |
model="gpt-4", # or "gpt-3.5-turbo" if needed | |
messages=[{"role": "user", "content": prompt}] | |
) | |
gpt_reply = response.choices[0].message["content"] | |
except Exception as e: | |
gpt_reply = f" GPT request failed: {e}" | |
# Display output | |
st.success(f"Churn: {'Yes' if churn else 'No'}") | |
st.info(f"Suggestion: {suggestion}") | |
st.markdown(" GPT's Advice:") | |
st.write(gpt_reply) | |
else: | |
st.warning("Customer not found. Please check your input.") | |