Build Machine Learning Models (linear regression, ridge regression, and lasso) to Predict and Deploy in Flask
regiapriandi | Aug. 19, 2023, 5:04 p.m.
regiapriandi | Aug. 19, 2023, 5:04 p.m.
Lately, many people are busy investing in stocks or other online-based investments such as gold and dollar investments. In carrying out college assignments, namely the task of building machine learning-based applications.
My friends and I in a group that we call friends of mass organizations decided to build an application for predicting the price of gold, silver, and the dollar against the rupiah for tomorrow’s prices where this application was built to help people who want to invest in gold or dollars by predicting the price of tomorrow.
predicting prices the next day will increase or decrease which will help people see the trend in the price of gold, silver, and the dollar against the rupiah to make it easier for them to invest and minimize losses.
for this project built from scratch together using GitHub, for GitHub link this project https://github.com/regiapriandi012/PricePredictions.git and for directory structure like this,
└── PricePredictions
├── model
│ ├── __init__.py
│ ├── modelDolarRidge.py
│ ├── modelDolarLasso.py
│ ├── modelDolarLinear.py
│ ├── modelEmasRidge.py
│ ├── modelEmasLasso.py
│ ├── modelEmasLinear.py
│ ├── modelPerakRidge.py
│ ├── modelPerakLasso.py
│ └── modelPerakLinear.py
├── server
│ ├── __init__.py
│ ├── conf
│ │ ├── __init__.py
│ │ ├── database.ini
│ │ └── setting.py
│ ├── __init__.py
│ └── connect.py
├── static
│ ├── img
│ │ ├── bagus.jpg
│ │ ├── emas.jpg
│ │ ├── fahri.jpg
│ │ ├── logo.jpg
│ │ ├── perak.jpg
│ │ ├── reqi.jpg
│ │ ├── sine.jpg
│ │ └── uang.jpg
│ └── style.css
├── templates
│ ├── index.html
│ └── model.html
├── __init__.py
├── app.py
├── requirements.txt
└── README.md
import psycopg2
import pandas as pd
from .conf import config
# Obtain the configuration parameters
params = config()
# Connect to the PostgreSQL database
conn = psycopg2.connect(**params)
# Create a new cursor
cur = conn.cursor()
# A function that takes in a PostgreSQL query and outputs a pandas database
def create_pandas_table(sql_query, database=conn):
table = pd.read_sql_query(sql_query, database)
return table
# Utilize th24re create_pandas_table function to create a Pandas data frame
# Store the data as a variable
data_emas = create_pandas_table("SELECT * FROM emas")
data_perak = create_pandas_table("SELECT * FROM perak")
data_dolar = create_pandas_table("SELECT * FROM dolar")
# Close the cursor and connection to so the server can allocate
# bandwidth to other requests
cur.close()
conn.close()
from configparser import ConfigParser
#directory di laptop @beroek
#def config(filename='C:/Users/Aceri3/PycharmProjects/PricePredictions/server/conf/database.ini', section='postgresql'):
#directory di laptop @mbagusi
#def config(filename='D:/project vscode/PricePredictions/server/conf/database.ini', section='postgresql'):
#directory di laptop @regi
#def config(filename='/Users/regia/PycharmProjects/pythonProject/KECERDASANBUATAN/FINALL/server/conf/database.ini', section='postgresql'):
# create a parser
parser = ConfigParser()
# read configServer file
parser.read(filename)
# get section, default to postgresql
db = {}
if parser.has_section(section):
params = parser.items(section)
for param in params:
db[param[0]] = param[1]
else:
raise Exception('Section {0} not found in the {1} file'.format(section, filename))
return db
from sklearn.linear_model import LinearRegression
import numpy as np
from ..server import data_emas as data
import datetime
import pandas as pd
from sklearn import metrics
besok = datetime.date.today() + datetime.timedelta(days=1)
date = data["date"]
date_predict = np.array([str(str(besok.year)+'-'+str(besok.month)+'-'+str(besok.day))])
price = data["price"]
def to_datetime(date):
df = pd.DataFrame({'date': date})
df.date = pd.to_datetime(df.date)
return df.date
def to_datetime_pred(date_predict):
dfe = pd.DataFrame({'prediksi': date_predict})
dfe.prediksi = pd.to_datetime(dfe.prediksi)
return dfe.prediksi
x = to_datetime(date).values.astype(float).reshape(-1, 1)
x_predict = to_datetime_pred(date_predict).values.astype(float).reshape(-1, 1)
y = price.values.reshape(-1, 1)
lin = LinearRegression()
lin.fit(x, y)
def coef_intercept(lin):
coef = lin.coef_
intercept = lin.intercept_
return coef, intercept
def prediction(lin):
lin_predict = lin.predict(x)
lin_pred_future = lin.predict(x_predict)
return lin_predict, lin_pred_future
coef, intercept = coef_intercept(lin)
lin_predict, lin_pred_future = prediction(lin)
rmse = np.sqrt(metrics.mean_squared_error(y, lin_predict))
from flask import Flask, render_template, request
from .model.modelEmasLinear import lin_pred_future as el
from .model.modelDolarLinear import lin_pred_future as dl
from .model.modelPerakLinear import lin_pred_future as pl
from .model.modelEmasRidge import rid_pred_future as er
from .model.modelDolarRidge import rid_pred_future as dr
from .model.modelPerakRidge import rid_pred_future as pr
from .model.modelDolarLasso import las_pred_future as dla
from .model.modelPerakLasso import las_pred_future as pla
from .model.modelEmasLasso import las_pred_future as ela
import base64
from io import BytesIO
from matplotlib.figure import Figure
import datetime
besok = datetime.date.today() + datetime.timedelta(days=1)
app = Flask(__name__)
@app.route("/")
def index():
return render_template('index.html')
@app.route("/index")
def indexx():
return render_template('index.html')
@app.route("/model")
def model():
return render_template('model.html')
@app.route('/', methods=['POST'])
def modelll():
from .model.modelEmasLinear import coef as cel, intercept as iel, rmse as rel
from .model.modelPerakLinear import coef as cpl, intercept as ipl, rmse as rpl
from .model.modelDolarLinear import coef as cdl, intercept as idl, rmse as rdl
from .model.modelEmasRidge import coef as cer, intercept as ier, rmse as rer
from .model.modelDolarRidge import coef as cdr, intercept as idr, rmse as rdr
from .model.modelPerakRidge import coef as cpr, intercept as ipr, rmse as rpr
from .model.modelDolarLasso import coef as cdla, intercept as idla, rmse as rdla
from .model.modelEmasLasso import coef as cela, intercept as iela, rmse as rela
from .model.modelPerakLasso import coef as cpla, intercept as ipla, rmse as rpla
prediksi = request.form['prediksi']
metode = request.form['metode']
if metode == "Linear Regression" and prediksi == "Harga Emas":
from .model.modelEmasLinear import date, date_predict, y, to_datetime, to_datetime_pred, lin_predict, lin_pred_future
fig = Figure(figsize=(10, 8))
ax = fig.subplots()
ax.scatter(to_datetime(date), y, color='green')
ax.plot(to_datetime(date), lin_predict)
ax.scatter(to_datetime_pred(date_predict), lin_pred_future, color="blue")
ax.tick_params(labelrotation=30)
ax.set_ylabel("Dalam Rupiah")
ax.set_xlabel("Tanggal (jangka 14 hari)")
ax.legend(['Garis linear regression', 'Harga', 'Prediksi'])
ax.set_title("Grafik Linear Regression Prediksi Harga Emas")
buf = BytesIO()
fig.savefig(buf, format="png")
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return render_template('model.html', data=data, prediksi=prediksi, metode=metode, hasil='Rp. {}'.format(float(el)), date=str(besok.strftime("%A"))+', '+str(besok.day)+'/'+str(besok.month)+'/'+str(besok.year), coef=float(cel), intercept=float(iel), rmse=rel)
elif metode == "Linear Regression" and prediksi == "Harga Perak":
from .model.modelPerakLinear import date, date_predict, y, to_datetime, to_datetime_pred, lin_predict, lin_pred_future
fig = Figure(figsize=(10, 8))
ax = fig.subplots()
ax.scatter(to_datetime(date), y, color='green')
ax.plot(to_datetime(date), lin_predict)
ax.scatter(to_datetime_pred(date_predict), lin_pred_future, color="blue")
ax.tick_params(labelrotation=30)
ax.set_ylabel("Dalam Rupiah")
ax.set_xlabel("Tanggal (jangka 14 hari)")
ax.legend(['Garis linear regression', 'Harga', 'Prediksi'])
ax.set_title("Grafik Linear Regression Prediksi Harga Perak")
buf = BytesIO()
fig.savefig(buf, format="png")
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return render_template('model.html', data=data, prediksi=prediksi, metode=metode, hasil='Rp. {}'.format(float(pl)), date=str(besok.strftime("%A"))+', '+str(besok.day)+'/'+str(besok.month)+'/'+str(besok.year), coef=float(cpl), intercept=float(ipl), rmse=rpl)
elif metode == "Linear Regression" and prediksi == "Harga Dollar":
from .model.modelDolarLinear import date, date_predict, y, to_datetime, to_datetime_pred, lin_predict, lin_pred_future
fig = Figure(figsize=(10, 8))
ax = fig.subplots()
ax.scatter(to_datetime(date), y, color='green')
ax.plot(to_datetime(date), lin_predict)
ax.scatter(to_datetime_pred(date_predict), lin_pred_future, color="blue")
ax.tick_params(labelrotation=30)
ax.set_ylabel("Dalam Rupiah")
ax.set_xlabel("Tanggal (jangka 14 hari)")
ax.legend(['Garis linear regression', 'Harga', 'Prediksi'])
ax.set_title("Grafik Linear Regression Prediksi Harga Dollar")
buf = BytesIO()
fig.savefig(buf, format="png")
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return render_template('model.html', data=data, prediksi=prediksi, metode=metode, hasil='Rp. {}'.format(float(dl)), date=str(besok.strftime("%A"))+', '+str(besok.day)+'/'+str(besok.month)+'/'+str(besok.year), coef=float(cdl), intercept=float(idl), rmse=rdl)
elif metode == "Lasso" and prediksi == "Harga Emas":
from .model.modelEmasLasso import date, date_predict, y, to_datetime, to_datetime_pred, las_predict, las_pred_future
fig = Figure(figsize=(10, 8))
ax = fig.subplots()
ax.scatter(to_datetime(date), y, color='green')
ax.plot(to_datetime(date), las_predict)
ax.scatter(to_datetime_pred(date_predict), las_pred_future, color="blue")
ax.tick_params(labelrotation=30)
ax.set_ylabel("Dalam Rupiah")
ax.set_xlabel("Tanggal (jangka 14 hari)")
ax.legend(['Garis Lasso', 'Harga', 'Prediksi'])
ax.set_title("Grafik Lasso Prediksi Harga Emas")
buf = BytesIO()
fig.savefig(buf, format="png")
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return render_template('model.html', data=data, prediksi=prediksi, metode=metode, hasil='Rp. {}'.format(float(ela)), date=str(besok.strftime("%A"))+', '+str(besok.day)+'/'+str(besok.month)+'/'+str(besok.year), coef=float(cela), intercept=float(iela), rmse=rela)
elif metode == "Lasso" and prediksi == "Harga Perak":
from .model.modelPerakLasso import date, date_predict, y, to_datetime, to_datetime_pred, las_predict, las_pred_future
fig = Figure(figsize=(10, 8))
ax = fig.subplots()
ax.scatter(to_datetime(date), y, color='green')
ax.plot(to_datetime(date), las_predict)
ax.scatter(to_datetime_pred(date_predict), las_pred_future, color="blue")
ax.tick_params(labelrotation=30)
ax.set_ylabel("Dalam Rupiah")
ax.set_xlabel("Tanggal (jangka 14 hari)")
ax.legend(['Garis Lasso', 'Harga', 'Prediksi'])
ax.set_title("Grafik Lasso Prediksi Harga Perak")
buf = BytesIO()
fig.savefig(buf, format="png")
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return render_template('model.html', data=data, prediksi=prediksi, metode=metode, hasil='Rp. {}'.format(float(pla)), date=str(besok.strftime("%A"))+', '+str(besok.day)+'/'+str(besok.month)+'/'+str(besok.year), coef=float(cpla), intercept=float(ipla), rmse=rpla)
elif metode == "Lasso" and prediksi == "Harga Dollar":
from .model.modelDolarLasso import date, date_predict, y, to_datetime, to_datetime_pred, las_predict, las_pred_future
fig = Figure(figsize=(10, 8))
ax = fig.subplots()
ax.scatter(to_datetime(date), y, color='green')
ax.plot(to_datetime(date), las_predict)
ax.scatter(to_datetime_pred(date_predict), las_pred_future, color="blue")
ax.tick_params(labelrotation=30)
ax.set_ylabel("Dalam Rupiah")
ax.set_xlabel("Tanggal (jangka 14 hari)")
ax.legend(['Garis Lasso', 'Harga', 'Prediksi'])
ax.set_title("Grafik Lasso Prediksi Harga Dollar")
buf = BytesIO()
fig.savefig(buf, format="png")
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return render_template('model.html', data=data, prediksi=prediksi, metode=metode, hasil='Rp. {}'.format(float(dla)), date=str(besok.strftime("%A"))+', '+str(besok.day)+'/'+str(besok.month)+'/'+str(besok.year), coef=float(cdla), intercept=float(idla), rmse=rdla)
elif metode == "Ridge Regression" and prediksi == "Harga Emas":
from .model.modelEmasRidge import date, date_predict, y, to_datetime, to_datetime_pred, rid_predict, rid_pred_future
fig = Figure(figsize=(10, 8))
ax = fig.subplots()
ax.scatter(to_datetime(date), y, color='green')
ax.plot(to_datetime(date), rid_predict)
ax.scatter(to_datetime_pred(date_predict), rid_pred_future, color="blue")
ax.tick_params(labelrotation=30)
ax.set_ylabel("Dalam Rupiah")
ax.set_xlabel("Tanggal (jangka 14 hari)")
ax.legend(['Garis Ridge Regression', 'Harga', 'Prediksi'])
ax.set_title("Grafik Ridge Regression Prediksi Harga Emas")
buf = BytesIO()
fig.savefig(buf, format="png")
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return render_template('model.html', data=data, prediksi=prediksi, metode=metode, hasil='Rp. {}'.format(float(er)), date=str(besok.strftime("%A"))+', '+str(besok.day)+'/'+str(besok.month)+'/'+str(besok.year), coef=float(cer), intercept=float(ier), rmse=rer)
elif metode == "Ridge Regression" and prediksi == "Harga Perak":
from .model.modelPerakRidge import date, date_predict, y, to_datetime, to_datetime_pred, rid_predict, rid_pred_future
fig = Figure(figsize=(10, 8))
ax = fig.subplots()
ax.scatter(to_datetime(date), y, color='green')
ax.plot(to_datetime(date), rid_predict)
ax.scatter(to_datetime_pred(date_predict), rid_pred_future, color="blue")
ax.tick_params(labelrotation=30)
ax.set_ylabel("Dalam Rupiah")
ax.set_xlabel("Tanggal (jangka 14 hari)")
ax.legend(['Garis Ridge Regression', 'Harga', 'Prediksi'])
ax.set_title("Grafik Ridge Regression Prediksi Harga Perak")
buf = BytesIO()
fig.savefig(buf, format="png")
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return render_template('model.html', data=data, prediksi=prediksi, metode=metode, hasil='Rp. {}'.format(float(pr)), date=str(besok.strftime("%A"))+', '+str(besok.day)+'/'+str(besok.month)+'/'+str(besok.year), coef=float(cpr), intercept=float(ipr), rmse=rpr)
elif metode == "Ridge Regression" and prediksi == "Harga Dollar":
from .model.modelDolarRidge import date, date_predict, y, to_datetime, to_datetime_pred, rid_predict, rid_pred_future
fig = Figure(figsize=(10, 8))
ax = fig.subplots()
ax.scatter(to_datetime(date), y, color='green')
ax.plot(to_datetime(date), rid_predict)
ax.scatter(to_datetime_pred(date_predict), rid_pred_future, color="blue")
ax.tick_params(labelrotation=30)
ax.set_ylabel("Dalam Rupiah")
ax.set_xlabel("Tanggal (jangka 14 hari)")
ax.legend(['Garis Ridge Regression', 'Harga', 'Prediksi'])
ax.set_title("Grafik Ridge Regression Prediksi Harga Dolar")
buf = BytesIO()
fig.savefig(buf, format="png")
data = base64.b64encode(buf.getbuffer()).decode("ascii")
return render_template('model.html', data=data, prediksi=prediksi, metode=metode, hasil='Rp. {}'.format(float(dr)), date=str(besok.strftime("%A"))+', '+str(besok.day)+'/'+str(besok.month)+'/'+str(besok.year), coef=float(cdr), intercept=float(idr), rmse=rdr)
if __name__ == "__main__":
app.run(debug=True)
I am Regi Apriandi, Welcome to the blog page, I hope this page can be useful for readers who have visited, Thank you.
RSS