ravvasanthosh's picture
Rename app5.py to app.py
6eaf08a verified
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsRegressor
from sklearn.metrics import r2_score,root_mean_squared_error
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import GridSearchCV,KFold
from sklearn.pipeline import Pipeline
from feature_engine.outliers import Winsorizer
from sklearn.compose import ColumnTransformer
import streamlit as stl
stl.title('this is a sales prediction model 🛠️')
df = pd.read_csv(r'company.csv')
head = df.head()
stl.write(head)
x = df[['TV','Radio','Newspaper']]
y = df['Sales']
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.2,random_state=23)
winsor = Winsorizer(capping_method='iqr', tail='right', fold=1.5)
u = ['TV','Radio','Newspaper']
news_paper = Pipeline([('otlier',winsor)])
scaler = Pipeline([('scaling',StandardScaler())])
i = ['TV','Radio','Newspaper']
column_transform = ColumnTransformer([("o", news_paper, u),('s',scaler,i)],remainder= 'passthrough')
model6 = Pipeline([('pre',column_transform),
('algo',KNeighborsRegressor(n_neighbors = 5))])
model6.fit(x_train,y_train)
y_pred = model6.predict(x_test) #waste
before_tuning =r2_score(y_test,y_pred)
before_tune_error = root_mean_squared_error(y_test,y_pred)
if stl.button('click for raw score and error'):
stl.write(before_tuning)
stl.write(before_tune_error)
kf = KFold(n_splits = 5, shuffle = True, random_state = 23)
hyper_parameters = {"n_neighbors": range(1, 31),
"weights": ['distance','uniform'],
"p": [1,2],
"algorithm": ['auto', 'ball_tree', 'kd_tree', 'brute']}
model1 = KNeighborsRegressor(n_neighbors=5)
grid = GridSearchCV(model1, hyper_parameters, cv = kf, scoring = 'neg_root_mean_squared_error', n_jobs = 2)
grid.fit(x,y)
model = Pipeline([('pre',column_transform),
('algo',KNeighborsRegressor(algorithm = 'brute', n_neighbors = 6, p = 1,weights = 'distance'))])
model.fit(x_train,y_train)
p = model.predict(x_test)
after_tuning = r2_score(y_test,p)
after_tune_error =root_mean_squared_error(y_test,p)
if stl.button('click for tuned score and error'):
stl.write(after_tuning)
stl.write(after_tune_error)
stl.sidebar.header("User Input")
User_TV = stl.sidebar.number_input("TV")
User_Radio = stl.sidebar.number_input("Radio")
User_Newspaper = stl.sidebar.number_input("Newspaper")
user_input_data = pd.DataFrame([[User_TV, User_Radio, User_Newspaper]], columns = ['TV', 'Radio', 'Newspaper'])
if stl.button("Predict Sales"):
prediction = model.predict(user_input_data)
stl.write(prediction)