File size: 5,432 Bytes
3ce909f | 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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | 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) |