This repository has been archived by the owner on Feb 18, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
/
predict.py
146 lines (141 loc) · 10.5 KB
/
predict.py
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
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
import streamlit as st
import pandas as pd
import pickle
# for encoder
labels = {'НАО': 0,
'ТАО': 1,
'Договор уступки': 0,
'Договор участия': 1,
'апартаменты': 0,
'квартира': 1,
'Аналитика по корпусу': 0,
'Аналитика по типу комнатности': 1,
'Крайние значения обновлений': 2,
'Прайс совпадение площади': 3,
'Прайс точное совпадение': 4,
'Цена по последнему историческому слою': 5,
'Цена позже даты сделки': 6,
'без скидки': 0,
'со скидкой': 1,
'со скидкой и без скидки': 2,
'ФЛ': 0,
'ЮЛ': 1,
'Ипотека': 0,
'Нет': 1,
'ДА': 0,
'Введен в эксплуатацию': 0,
'Монтажные и отделочные работы': 1,
'Начало монтажных работ': 2,
'Получение РВЭ, благоустройство территории': 3,
'Работы нулевого цикла': 4,
'Строительство не начато': 5,
'Бизнес': 0,
'Комфорт': 1,
'Эконом': 2,
'Barkli': 0,
'INGRAD': 1,
'Lexion Development': 2,
'PPF Real Estate': 3,
'Sezar Group': 4,
'А101': 5,
'Абсолют Недвижимость': 6,
'Аквилон Инвест': 7,
'ГК Родина': 8,
'Гранель': 9,
'Инвесттраст': 10,
'Крост': 11,
'МИЦ': 12,
'Миэль Загородная Недвижимость': 13,
'ПИК': 14,
'СЗ СК Ключ': 15,
'Самолет': 16,
'СтройИнвестТопаз': 17,
'ТБ-Инвест': 18,
'УЭЗ': 19,
'Центрстрой': 20,
'Без отделки': 0,
'Без отделки, под чистовую и с отделкой': 1,
'Без отделки, с отделкой и мебель как доп. опция': 2,
'Отделка как доп. опция': 3,
'Под чистовую': 4,
'Под чистовую и без отделки': 5,
'Под чистовую и отделка как доп. опция': 6,
'Под чистовую и с отделкой': 7,
'С отделкой': 8,
'С отделкой и без': 9,
'С отделкой и мебелью': 10,
'С отделкой и отделка как доп. опция': 11,
'С отделкой, мебель как доп. опция': 12}
def prediction_page():
st.markdown('# Предсказание цены за кв. метр')
st.write('Укажите интересующие Вас параметры, и мы предскажем Вам цену за квартиру!')
X = pd.DataFrame()
col1, col2, col3 = st.columns(3)
predict = False
with col1:
X['Район'] = [labels[st.selectbox('Район', ['НАО', 'ТАО'], key=1)]]
X['Стадия строительной готовности на дату договора'] = [labels[st.selectbox(
'Стадия строительной готовности на дату договора',
['Введен в эксплуатацию', 'Монтажные и отделочные работы', 'Начало монтажных работ',
'Получение РВЭ, благоустройство территории', 'Работы нулевого цикла', 'Строительство не начато'], key=2)]]
X['Срок ввода в эксплуатацию - Старт продаж'] = [
st.number_input('Срок ввода в эксплуатацию - Старт продаж', value=789)]
X['Класс'] = [labels[st.selectbox('Класс', ['Бизнес', 'Комфорт', 'Эконом'], key=3)]]
X['Девелопер'] = [labels[st.selectbox('Девелопер',
['Barkli', 'INGRAD', 'Lexion Development',
'PPF Real Estate', 'Sezar Group', 'А101',
'Абсолют Недвижимость', 'Аквилон Инвест', 'ГК Родина',
'Гранель', 'Инвесттраст', 'Крост', 'МИЦ',
'Миэль Загородная Недвижимость', 'ПИК', 'СЗ СК Ключ', 'Самолет',
'СтройИнвестТопаз', 'ТБ-Инвест', 'УЭЗ', 'Центрстрой'], key=4)]]
X['Срок ввода в эксплуатацию - Договор'] = [st.number_input('Срок ввода в эксплуатацию - Договор', 492)]
X['Квартал договора'] = st.number_input('Квартал договора', 1, max_value=4)
X['Квартал регистрации'] = st.number_input('Квартал регистрации', 1, max_value=4)
X['Тип сделки'] = [labels[st.selectbox('Тип сделки', ['Договор уступки', 'Договор участия'], key=5)]]
X['Тип объекта'] = [labels[st.selectbox('Тип объекта', ['апартаменты', 'квартира'], key=6)]]
X['Секция'] = st.number_input('Секция', value=1)
X['Этаж'] = st.number_input('Этаж', value=1)
X['Количество комнат'] = st.number_input('Количество комнат (0 если студия)', value=0)
with col2:
X['Площадь согласно ПД'] = st.number_input('Площадь (в кв. м)', value=49)
X['Метод определения цены'] = [labels[st.selectbox('Метод определения цены',
['Аналитика по корпусу', 'Аналитика по типу комнатности',
'Крайние значения обновлений',
'Прайс совпадение площади', 'Прайс точное совпадение',
'Цена по последнему историческому слою',
'Цена позже даты сделки'], key=7)]]
X['Включение скидок/акций в ценообразование'] = [labels[st.selectbox('Включение скидок/акций в ценообразование',
['без скидки', 'со скидкой',
'со скидкой и без скидки'], key=8)]]
X['Скидки по дате договора'] = st.number_input('Скидки по дате договора в %', 0)
X['Отделка по корпусу'] = [labels[st.selectbox('Отделка по корпусу',
['Без отделки', 'Без отделки, под чистовую и с отделкой',
'Без отделки, с отделкой и мебель как доп. опция',
'Отделка как доп. опция', 'Под чистовую',
'Под чистовую и без отделки',
'Под чистовую и отделка как доп. опция',
'Под чистовую и с отделкой', 'С отделкой', 'С отделкой и без',
'С отделкой и мебелью', 'С отделкой и отделка как доп. опция',
'С отделкой, мебель как доп. опция'], key=9)]]
X['Тип продавца'] = [labels[st.selectbox('Тип продавца: физическое/юридическое лицо', ['ФЛ', 'ЮЛ'], key=10)]]
X['Тип покупателя'] = [
labels[st.selectbox('Тип покупателя: физическое/юридическое лицо', ['ФЛ', 'ЮЛ'], key=11)]]
X['Кол-во покупателей'] = st.number_input('Кол-во покупателей', value=1)
X['Тип ипотеки'] = [labels[st.selectbox('Тип ипотеки', ['Ипотека', 'Нет'], key=12)]]
X['Участие объекта в оптовой сделке'] = [
labels[st.selectbox('Участие объекта в оптовой сделке', ['ДА', 'Нет'], key=12)]]
X['Срок в экспозиции до момента сделки, дней'] = st.number_input('Секция', value=96) # column's mean
X['Рост цены за 1 кв.м за период экспонирования'] = st.number_input(
'Рост цены за 1 кв.м за период экспонирования', value=5)
# if st.button('Предсказать цену'):
# predict = True
with col3:
if st.button('Предсказать цену'):
with st.spinner('Пару секунд...'):
with open("model.pkl", "rb") as f:
model = pickle.load(f)
res = model.predict(X)
st.markdown(f'# Цена за кв. метр:')
st.markdown(f"## {'{0:,.2f}'.format(round(res[0], 3))} рублей")
st.markdown(f'# Общая цена:')
st.markdown(f"## {'{0:,.2f}'.format(round(X['Площадь согласно ПД'][0] * res[0]))} рублей")