import streamlit as st from tensorflow.keras.models import load_model import pandas as pd import numpy as np import pickle from datetime import datetime , time # Load All Files with open('prep_pipeline.pkl','rb') as file1: prep = pickle.load(file1) ann = load_model('churn_model.h5') tanggal_waktu_sekarang = datetime.now().time() waktu_sekarang = datetime.now().date() def run(): with st.form('key=Churn_prediction'): user_id = st.text_input('user_id:', '') age = st.number_input("age:" ,min_value=18 , max_value=100,step=1) gender = st.radio('gender', ('F','M')) region_category = st.radio('region_category', ('Town','City','Village')) membership_category = st.selectbox('membership_category', ('No Membership','Basic Membership','Silver Membership','Gold Membership','Platinum Membership','Premium Membership'), index=1) st.markdown('---') joining_date = st.date_input('joining_date', waktu_sekarang) joined_through_referral = st.radio('joined_through_referral',(True,False)) preferred_offer_types = st.selectbox('preferred_offer_types',('Gift Vouchers/Coupons','Credit/Debit Card Offers','Without Offers')) medium_of_operation = st.selectbox('medium_of_operation',('Desktop','Smartphone','Both')) internet_option = st.radio('internet_option',('Wi-Fi','Mobile_Data','Fiber_Optic')) last_visit_time = st.time_input('last_visit_time', tanggal_waktu_sekarang) days_since_last_login = st.number_input('days_since_last_login', min_value=0 , max_value=1000,step=1) avg_time_spent = st.number_input('avg_time_spent' , min_value=0 , max_value=3300,step=1) avg_transaction_value = st.number_input('avg_transaction_value', min_value=500 , max_value=100000,step=5) avg_frequency_login_days = st.number_input('avg_frequency_login_days', min_value=0 , max_value=75,step=1) points_in_wallet = st.number_input('points_in_wallet',min_value=0 , max_value=2100,step=5) used_special_discount = st.radio('used_special_discount', ('Yes','No')) offer_application_preference = st.radio('offer_application_preference',('Yes','No')) past_complaint = st.radio('past_complaint',('Yes','No')) complaint_status = st.selectbox('complaint_status', ('Not Applicable' , 'Unsolved','Solved','Solved in Follow-up','No Information Available')) feedback = st.selectbox('feedback', ('Poor Product Quality','No reason specified','Too many ads','Poor Website','Poor Customer Service','Reasonable Price','User Friendly Website','Products always in Stock','Quality Customer Care')) submitted = st.form_submit_button('Predict') data_inf = { 'user_id': user_id, 'age': age, 'gender': gender, 'region_category': region_category, 'membership_category': membership_category, 'joining_date': joining_date, 'joined_through_referral': joined_through_referral, 'preferred_offer_types': preferred_offer_types, 'medium_of_operation': medium_of_operation, 'internet_option': internet_option, 'last_visit_time': last_visit_time, 'days_since_last_login': days_since_last_login, 'avg_time_spent' : avg_time_spent, 'avg_transaction_value' : avg_transaction_value, 'avg_frequency_login_days' : avg_frequency_login_days, 'points_in_wallet' : points_in_wallet, 'used_special_discount' : used_special_discount, 'offer_application_preference' : offer_application_preference, 'past_complaint' : past_complaint, 'complaint_status' : complaint_status, 'feedback' : feedback } data_inf = pd.DataFrame([data_inf]) positive_words = ['reasonable', 'friendly', 'always', 'stock','care','price','user','products','in'] negative_words = ['poor', 'too', 'many', 'terrible','product quality','ads','service'] def classify_sentiment(text): words = text.lower().split() num_positive = sum(1 for word in words if word in positive_words) num_negative = sum(1 for word in words if word in negative_words) if num_positive > num_negative: return 'positif' elif num_positive < num_negative: return 'negatif' else: return 'netral' # Menerapkan fungsi klasifikasi sentimen menggunakan apply pada DataFrame data_inf['sentimen'] = data_inf['feedback'].apply(classify_sentiment) final_data = prep.transform(data_inf) if submitted: y_pred_inf = ann.predict(final_data) y_pred_inf = np.where(y_pred_inf >= 0.5 , 'Churn' , 'Not Churn') st.write('Customer will be : ', str(y_pred_inf)) if __name__ == '__main__': run()