Какие признаки можно добавить в модель по предсказанию сигнала?
У меня есть задача предсказать значение RSPR. Какие данные у меня есть:
У меня есть несколько карт с логами пользователей, в которых есть:
- Координаты пользователя (много X и Y, что говорит о том, где находится пользователь)
- Координаты точки сигнала(которая всегда одинакова на каждой карте)
- Координаты зданий
- Материал здания (стекло, камень и др.)
Как выглядят данные для одной из карт:
building_x1 building_y1 building_x2 building_y2 building_x3 building_y3 building_x4 building_y4 material
0 60 300 90 300 60 420 90 420 rock
1 200 336 230 336 200 416 230 416 concrete
2 270 360 300 360 270 440 300 440 glass
3 420 360 450 360 420 440 450 440 rock
4 520 420 550 500 520 500 550 420 concrete
5 580 560 580 520 330 560 330 520 glass
x y rsrp
0 100 200 -15.600237
1 100 200 -15.600237
2 100 200 -15.600237
3 100 200 -15.600237
4 100 200 -15.600237
... ... ... ...
664 32 420 -92.882267
665 32 420 -92.882267
666 32 420 -92.882267
667 32 420 -92.882267
668 32 420 -92.882267
Я рассчитал следующие характеристики:
1)Заблокирован ли сигнал зданием (а если есть - беру во внимание, из какого материала это здание) То есть пересечение линии линии (сигнал - пользователь) зданиями
def HouseCrossing(buildings,log):
cords = points(buildings)
x, y = log['x'].values, log['y'].values
rock = [0]*len(log)
glass = [0]*len(log)
concrete = [0]*len(log)
cent_x = 390
cent_y = 286
#Выбираем точку
for i in range(len(log)):
#Выбираем здание
#print(log.iloc[i])
for j in range(len(buildings)):
houseLines = cords[j]
#Проверяем не находится ли точка в этом здании
p = path.Path(houseLines)
#print("в доме: ", p.contains_points([(x[i], y[i])])[0])
if p.contains_points([(x[i], y[i])])[0] == False:
result = 0
#Пробегаем по каждой стене дома
for k in range(4):
if k==3:
hsln = [houseLines[k], houseLines[0]]
else:
hsln = [houseLines[k], houseLines[k+1]]
p1, q1, p2, q2 = Point(hsln[0][0],hsln[0][1]), Point(hsln[1][0],hsln[1][1]), Point(x[i], y[i]), Point(cent_x, cent_y)
if doIntersect(p1, q1, p2, q2):
if buildings.iloc[j]['material'] == 'glass':
glass[i] += 1
break
if buildings.iloc[j]['material'] == 'rock':
rock[i] += 1
break
if buildings.iloc[j]['material'] == 'concrete':
concrete[i] += 1
break
else:
break
intersection = pd.DataFrame(list(zip(rock, glass, concrete)),
columns =['rock', 'glass', 'concrete'])
return intersection
2)Находится ли пользователь внутри здания (если да - из какого материала)
def insideTheHouse(log, buildings):
x, y = log['x'].values, log['y'].values
#Функция получения координат зданий
cords = points(buildings)
InHouse = ["No"]*len(log)
#for i, j in zip(x,y):
for i in range(len(log)):
for z in range(len(buildings)):
p = path.Path(cords[z])
if p.contains_points([(x[i], y[i])])[0] == True:
InHouse[i] = (buildings.iloc[z]['material'])
return InHouse
Я проверил, влияет ли расстояние сигнала на RSPR. В моем конкретном случае - влияния не было замечено. Поэтому как фичу его не использую. Но мне сказали, что этих функций недостаточно для использования моделей прогнозирования.
Вот видео о том, как данные были собраны на одной из карт: https://www.youtube.com/watch?v=rIjlHPCbEk0
Итак, мой вопрос: какие еще признаки я должен добавить, чтобы улучшить мои данные для прогнозирования? Я так понял, один из доп признаков это отражения лучей сигнала. Но пока нет идей, как правильно это реализовать. Буду благодарен за любую помощь.
