Spaces:
Running
Running
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") | |
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) | |