Какие признаки можно добавить в модель по предсказанию сигнала?

У меня есть задача предсказать значение RSPR. Какие данные у меня есть:

У меня есть несколько карт с логами пользователей, в которых есть:

  1. Координаты пользователя (много X и Y, что говорит о том, где находится пользователь)
  2. Координаты точки сигнала(которая всегда одинакова на каждой карте)
  3. Координаты зданий
  4. Материал здания (стекло, камень и др.)

Как выглядят данные для одной из карт:

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

Также скриншот одной из карт: enter image description here

Итак, мой вопрос: какие еще признаки я должен добавить, чтобы улучшить мои данные для прогнозирования? Я так понял, один из доп признаков это отражения лучей сигнала. Но пока нет идей, как правильно это реализовать. Буду благодарен за любую помощь.


Ответы (0 шт):