recomm / mainflask copy.py
Sahil2507's picture
Upload mainflask copy.py
3ce909f verified
import streamlit as st
import pandas as pd
import numpy as np
from sklearn.preprocessing import MinMaxScaler, OneHotEncoder
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Dropout
import tensorflow as tf
# Data Initialization
location_df = pd.DataFrame({
'location': ['Theni', 'Chennai', 'Thiruvallur', 'Coimbatore', 'Ariyalur'],
'population_density': [21000, 11000, 8400, 7100, 6900],
'gender_ratio': [0.92, 0.87, 0.95, 0.98, 0.89],
'income_level': [45000, 52000, 48000, 38000, 35000],
'farming_cycle': ['Kharif', 'Rabi', 'Mixed', 'Kharif', 'Mixed'],
'seasonal_pattern': ['Monsoon', 'Winter', 'Year-round', 'Monsoon', 'Year-round']
})
scheme_df = pd.DataFrame({
'scheme': ['Sukanya Samriddhi Yojana', 'Senior citizen saving schemes', 'Kisan Vikas Patra', 'Post office saving account', 'Monthly income scheme'],
'ROI': [12.5, 8.2, 15.3, 10.1, 9.8],
'target_gender': ['Both', 'Male', 'Both', 'Female', 'Both'],
'target_age_group': ['Adult', 'Young', 'Adult', 'Senior', 'Young'],
'tax_benefit': ['Yes', 'No', 'Yes', 'No', 'Yes'],
'risk_level': ['Low', 'Medium', 'High', 'Low','Medium']
})
user_feedback_df = pd.DataFrame({
'user_id': [1, 2, 3, 4, 5],
'location': ['Theni', 'Chennai', 'Thiruvallur', 'Coimbatore', 'Ariyalur'],
'scheme': ['Sukanya Samriddhi Yojana', 'Senior citizen saving schemes', 'Kisan Vikas Patra', 'Post office saving account', 'Monthly income scheme'],
'rating': [4.5, 3.8, 4.2, 3.9, 4.0]
})
# Data Preprocessing
scaler = MinMaxScaler()
location_df[['population_density', 'income_level']] = scaler.fit_transform(
location_df[['population_density', 'income_level']]
)
encoder = OneHotEncoder(sparse_output=False)
location_encoder = OneHotEncoder(sparse_output=False)
location_cat_encoded = location_encoder.fit_transform(location_df[['farming_cycle', 'seasonal_pattern']])
location_cat_cols = location_encoder.get_feature_names_out(['farming_cycle', 'seasonal_pattern'])
location_encoded_df = pd.DataFrame(location_cat_encoded, columns=location_cat_cols)
scheme_encoder = OneHotEncoder(sparse_output=False)
scheme_cat_encoded = scheme_encoder.fit_transform(scheme_df[['target_gender', 'target_age_group', 'tax_benefit', 'risk_level']])
scheme_cat_cols = scheme_encoder.get_feature_names_out(['target_gender', 'target_age_group', 'tax_benefit', 'risk_level'])
scheme_encoded_df = pd.DataFrame(scheme_cat_encoded, columns=scheme_cat_cols)
location_features = pd.concat([
location_df[['population_density', 'gender_ratio', 'income_level']],
location_encoded_df
], axis=1)
scheme_features = pd.concat([
scheme_df[['ROI']],
scheme_encoded_df
], axis=1)
def create_autoencoder(input_dim):
model = Sequential([
Dense(32, activation='relu', input_shape=(input_dim,)),
Dropout(0.2),
Dense(16, activation='relu'),
Dropout(0.2),
Dense(8, activation='relu'),
Dense(16, activation='relu'),
Dense(32, activation='relu'),
Dense(input_dim, activation='sigmoid')
])
model.compile(optimizer='adam', loss='mse')
return model
location_autoencoder = create_autoencoder(location_features.shape[1])
location_autoencoder.fit(location_features, location_features, epochs=10, batch_size=2, verbose=0)
scheme_autoencoder = create_autoencoder(scheme_features.shape[1])
scheme_autoencoder.fit(scheme_features, scheme_features, epochs=10, batch_size=2, verbose=0)
def create_recommendation_model(location_dim, scheme_dim):
location_input = tf.keras.Input(shape=(location_dim,))
scheme_input = tf.keras.Input(shape=(scheme_dim,))
x1 = Dense(16, activation='relu')(location_input)
x2 = Dense(16, activation='relu')(scheme_input)
concat = tf.keras.layers.Concatenate()([x1, x2])
x = Dense(32, activation='relu')(concat)
x = Dropout(0.2)(x)
x = Dense(16, activation='relu')(x)
x = Dense(8, activation='relu')(x)
output = Dense(1, activation='sigmoid')(x)
model = tf.keras.Model(inputs=[location_input, scheme_input], outputs=output)
model.compile(optimizer='adam', loss='mse')
return model
X_loc = location_features.values
X_scheme = scheme_features.values
y = user_feedback_df['rating'].values / 5.0
recommendation_model = create_recommendation_model(X_loc.shape[1], X_scheme.shape[1])
recommendation_model.fit([X_loc, X_scheme], y, epochs=10, batch_size=2, verbose=0)
# Streamlit UI
st.title('Scheme Recommendation System')
# User input
location = st.selectbox('Select Location', location_df['location'].values)
if st.button('Get Recommendations'):
if location not in location_df['location'].values:
st.error('Invalid location')
else:
loc_features = location_features.loc[location_df['location'] == location].values
loc_repeated = np.repeat(loc_features, len(scheme_features), axis=0)
preds = recommendation_model.predict([loc_repeated, scheme_features.values], verbose=0)
st.subheader(f'Recommendations for {location}')
# Create a DataFrame for displaying results
results = pd.DataFrame({
'Scheme': scheme_df['scheme'],
'Score': preds.flatten()
}).sort_values(by='Score', ascending=False)
st.dataframe(results)