1xbet_crash / streamlit_info.py
Sazuppy's picture
Upload 42 files
4663cd4 verified
import streamlit as st
import pandas as pd
import numpy as np
from lightgbm import LGBMRegressor
from catboost import CatBoostRegressor
import time
from sklearn.preprocessing import MinMaxScaler
import pickle
st.markdown('# Предсказание множителя игры Crash/1xbet')
with st.expander("Описание проекта:"):
st.write(
"""Проект представляет собой попытку предсказать множитель в игре crash на площадке 1xbet.
Данные приходят по websocket после загрузки всех игры на JS. Они формируются с помощью кликера написанного
на библиотеке для тестирования pywinauto, который полностью автономен, в датасет, который запущен
локально на виртуальной машине. Алгоритм при запуске включает браузер,
ожидает загрузку игры, переходит в режим разработчика и считывает данные. Проект не является работоспособным и будет еще
дорабатываться. Не решены проблемы по более быстрой передаче данных в модель, а так же качестве предсказаний.
""")
with st.expander("Описание данных на которых была обучена первая модель:"):
st.write("""
* data — дата обработки строки данных
* multiplier — множитель ставки
* number — количество игроков сделавших ставки
* Amount — сумма всех ставок игроков
"""
)
with st.expander("Инструкция по запуску на локальной машине"):
st.write("""
Для запуска на локальной машине вам необходимо установить программу для запуска виртуальной машины,
я использовал VMware Workstation 17 Pro, установить на виртуальной машине Google Chrome, заранее зайти в режим разработчина
и выставить фильтр во вкладке сеть на WS (websocket). В файле кликера prs_new.py выставить точки для кликера для своего разрешения экрана с
помощью mouse.py. Для понимания приложены скриншоты. В виртуальной машине выставить общей папкой текущую директорию расположения скриптов и
csv файлов, для постоянной записи и считывания. Указать путь к файлам согласно вашего расположения. Запустить файлы prs_new.py и streamlit_info.py
""")
st.image("1.png")
st.image("2.png")
st.image("3.png")
st.image("4.png")
@st.cache_resource
def get_model():
model_c = pickle.load(open('model_catboost_prs.pkl', 'rb'))
model_l = pickle.load(open('model_lgbm_prs.pkl', 'rb'))
scaler_model = pickle.load(open('scaler_prs.pkl', 'rb'))
return model_c, model_l, scaler_model
model_c, model_l, scaler_model = get_model()
def process_prediction(model_c, model_l, scaler_model):
while True:
try:
data_new = pd.read_csv(r'd:\VM_win10\общая_папка\selenium_crash\my_file_new.csv')
# for i in range(data_new.shape[0]-11,data_new.shape[0]-1):
data = pd.read_csv(r'd:\VM_win10\общая_папка\selenium_crash\my_file.csv')
data = data.replace(-1, np.nan)
data = data.dropna()
data = data.drop_duplicates(['session'])
data = data.drop(['session','session_ls','win_amount', 'death', 'a', 'w'], axis = 1)
data_dict = {'data': [data_new.iloc[-1]['data']],
'multiplier': [data.iloc[-1]['multiplier']],
'number': [data_new.iloc[-1]['number']],
'Amount': [data_new.iloc[-1]['Amount']]
}
data_dict = pd.DataFrame(data_dict)
data = pd.concat([data, data_dict], ignore_index=True)
data['data'] = pd.to_datetime(data['data'])
data = data.set_index('data')
data = data.tail(100)
data['second'] = data.index.second
data['minute'] = data.index.minute
data['hour'] = data.index.hour
for lag in range(1, 11):
data['lag_{}'.format(lag)] = data['multiplier'].shift(lag)
data['rolling_mean'] = data['multiplier'].shift().rolling(10).mean()
data = data.drop(['multiplier'], axis = 1)
container_1.write(data.tail(1))
data[['number', 'Amount']] = scaler_model.transform(data[['number', 'Amount']])
y_pred_l = model_l.predict(data.tail(1))
y_pred_c = model_c.predict(data.tail(1))
container_2.write(y_pred_l)
container_3.write(y_pred_c)
time.sleep(0.1)
except:
continue
start = st.button("Запуск обработки", type="primary")
stop = st.button("Остановка обработки")
if start:
st.write('Данные на вход')
container_1 = st.empty()
st.write('LGBMRegressor')
container_2 = st.empty()
st.write('CatBoostRegressor')
container_3 = st.empty()
process_prediction(model_c, model_l, scaler_model)