Это простой алгоритм рекомендаций
У меня есть пара информационных фреймов:
Элементы:
Index 1 2 3
item1 item1 item2 item3
item2 item2 item1 item3
item3 item3 item1 item2
Buy_Frequency:
UserId item1 item2 item3
1 0 5 15
2 2 0 0
3 0 2 10
Correlation_matrix:
item1 item2 item3
item1 1 0.1 0.1
item2 0.1 1 0.8
item3 0.1 0.8 1
и целевой фрейм данных, Рекомендация:
UserId item1 item2 item3
1 Na Na Na
2 Na Na Na
3 Na Na Na
Мой алгоритм следующий:
def getScore(frequency, correlation):
return sum(frequency * correlation) / sum(correlation)
Я хочу заполнить каждую ячейку в целевом фрейме данныхпо точкам рекомендации, с условием: если пользователь приобрел определенный товар раньше, точка будет 0. Мой код выглядит следующим образом:
for i in range(0,len(Recommendation.index)):
for j in range(1,len(Recommendation.columns)):
user = Recommendation.index[i]
activity = Recommendation.columns[j]
if Buy_Frequency.loc[i][j] != 0:
Recommendation.loc[i][j] = 0
else:
item_top_names = items.loc[activity][1:dt_length]
item_top_corr = Correlation_matrix.loc[activity].sort_values(ascending=False)[1:dt_length]
user_purchases = Buy_Frequency.loc[user,activity_top_names]
Recommendation.loc[i][j] = getScore(user_purchases,item_top_sims)
Результат вывода следующий, число не точное
User item1 item2 item3
1 5.25 0 0
2 0 6.13 7.45
3 4.15 0 0
У меня вопрос: можно ли как-нибудь увеличить скорость расчета этих пунктов Рекомендации?(не ячейка за ячейкой) Использовать NumPy?
А также, пожалуйста, дайте мне знать, если у вас есть лучшая идея для выполнения рекомендации.