非个性化建议

用 Python 构建推荐引擎

Robert O'Callaghan

Director of Data

识别配对

0     User_223           The Great Gatsby <---| 同一用户阅读
1     User_223     The Catcher in the Rye <---|
2     User_131        The Lord of the Rings
3     User_965               Little Women <---| 同一用户阅读
4     User_965       Fifty Shades of Grey <---|
... ...
用 Python 构建推荐引擎

排列 vs 组合

用户 book_title
User_233 The Great Gatsby
User_233 The Catcher in the Rye

变为:

Book A Book B
0 The Great Gatsby The Catcher in the Rye
1 The Catcher in the Rye The Great Gatsby

The Great Gatsby 同现的书 -> The Catcher in the Rye

The Catcher in the Rye 同现的书 -> The Great Gatsby

用 Python 构建推荐引擎

创建配对函数

from itertools import permutations

def create_pairs(x):


  return pairs
用 Python 构建推荐引擎

创建配对函数

from itertools import permutations

def create_pairs(x):
  pairs =                   permutations(x.values, 2)

  return pairs
  • permutations(list, length_of_permutations)) 生成包含所有排列的可迭代对象
用 Python 构建推荐引擎

创建配对函数

from itertools import permutations

def create_pairs(x):
  pairs =              list(permutations(x.values, 2))

  return pairs
  • permutations(list, length_of_permutations)) 生成包含所有排列的可迭代对象

  • list() 将该对象转换为可用列表

用 Python 构建推荐引擎

创建配对函数

from itertools import permutations

def create_pairs(x):
  pairs = pd.DataFrame(list(permutations(x.values, 2)), 
                           columns=['book_a','book_b'])
  return pairs
  • permutations(list, length_of_permutations)) 生成包含所有排列的可迭代对象

  • list() 将该对象转换为可用列表

  • pd.DataFrame() 将列表转换为含 book_abook_b 列的 DataFrame

用 Python 构建推荐引擎

将函数应用到数据

book_pairs = book_df.groupby('userId')['book_title'].apply(perm_function)
print(book_pairs.head())
                                book_a                                   book_b
userId                                                   
User_223     0        The Great Gatsby                   The Catcher in the Rye
             1  The Catcher in the Rye                         The Great Gatsby
User_965     0            Little Women                        40 Shades of Grey
             1       40 Shades of Grey                             Little Women
User_773     0       The Twilight Saga    Harry Potter and the Sorcerer's Stone
                                                                            ...
用 Python 构建推荐引擎

清理结果

book_pairs = book_pairs.reset_index(drop=True)
print(book_pairs.head())
                     book_a                                   book_b
0          The Great Gatsby                   The Catcher in the Rye
1    The Catcher in the Rye                         The Great Gatsby
3              Little Women                        40 Shades of Grey
4         40 Shades of Grey                             Little Women
5         The Twilight Saga    Harry Potter and the Sorcerer's Stone
                                                                 ...
用 Python 构建推荐引擎

统计配对次数

pair_counts = book_pairs.groupby(['book_a', 'book_b']).size()
book_a                                book_b                             
The Twilight Saga                     Fifty Shades of Grey           16
                                      Pride and Prejudice            12
                                                                    ...
pair_counts_df = pair_counts.to_frame(name = 'size').reset_index()
print(pair_counts_df.head())
     book_a                                book_b                       size    
1    The Twilight Saga                     Fifty Shades of Grey           16
2    The Twilight Saga                     Pride and Prejudice            12
                                                                         ...
用 Python 构建推荐引擎

查找推荐

pair_counts_sorted = pair_counts_df.sort_values('size', ascending=False)
pair_counts_sorted[pair_counts_sorted['book_a'] == 'Lord of the Rings']
                  book_a                                     book_b size
137    Lord of the Rings                                 The Hobbit   12
147    Lord of the Rings      Harry Potter and the Sorcerer's Stone   10
143    Lord of the Rings                        The Colour of Magic    9
                                                                     ...
用 Python 构建推荐引擎

Passons à la pratique !

用 Python 构建推荐引擎

Preparing Video For Download...