你是否在尋找數學建模比賽的突破點?數學建模進階思路!
作為經驗豐富的美賽O獎、國賽國一的數學建模團隊,我們將為你帶來本次數學建模競賽的全面解析。這個解決方案包不僅包括完整的代碼實現,還有詳盡的建模過程和解析,幫助你全面理解并掌握如何解決類似問題。
詳見文末
部分可視化(做了模糊處理,正文里的比這個更細致)
第一個問題是:基于用戶與博主歷史交互數據(觀看、點贊、評論、關注)的統計分析,能夠有效揭示用戶行為特征,為內容優化和交互提升提供決策依據。根據附件1提供的數據,請建立數學模型,預測各博主在2024.7.21當天新增的關注數,并根據預測結果,在表1中填寫當日新增關注數最多的5位博主ID及其對應的新增關注數。
問題1:預測各博主在2024.7.21當天新增的關注數
1. 問題理解
我們需要基于附件1中提供的2024.7.11至2024.7.20的歷史交互數據(觀看、點贊、評論、關注),預測每個博主在2024.7.21當天新增的關注數(即有多少新用戶關注了該博主)。然后,找出新增關注數最多的前5位博主及其新增關注數。
2. 數據特征
- 用戶行為:1(觀看)、2(點贊)、3(評論)、4(關注)。注意,點贊、評論、關注都隱含了觀看行為。
- 時間范圍:2024.7.11至2024.7.20。
- 預測目標:2024.7.21當天每個博主的新增關注數。
3. 建模思路
由于我們需要預測未來一天的新增關注數,可以考慮以下方法:
- 時間序列模型:將每個博主每天新增的關注數看作一個時間序列,使用時間序列模型(如ARIMA、指數平滑等)進行預測。
- 趨勢外推:根據過去幾天的新增關注數的趨勢,進行簡單的外推預測。
- 機器學習模型:將博主的歷史關注數作為特征,訓練回歸模型進行預測。
考慮到數據的時間跨度較短(10天),且每個博主的新增關注數可能存在波動,我們選擇加權移動平均法進行預測,因為這種方法簡單且能較好地反映近期的變化趨勢。
4. 數學模型
加權移動平均法:對每個博主,計算過去若干天(如最近3天)的新增關注數的加權平均值,作為預測值。權重可以根據距離預測日期的遠近進行調整,較近的日期賦予較大的權重。
假設我們要預測博主 b
在 t+1
天的新增關注數,使用過去 n
天的數據進行加權移動平均。權重向量為 w = [w1, w2, ..., wn]
,滿足 w1 + w2 + ... + wn = 1
且 w1 < w2 < ... < wn
(近期的權重大)。
設博主 b
在過去 n
天的新增關注數為 [y_{t-n+1}, y_{t-n+2}, ..., y_t]
,則 t+1
天的預測值為:
y ^ t + 1 = w 1 ? y t ? n + 1 + w 2 ? y t ? n + 2 + ? + w n ? y t \hat{y}_{t+1} = w1 \cdot y_{t-n+1} + w2 \cdot y_{t-n+2} + \cdots + wn \cdot y_t y^?t+1?=w1?yt?n+1?+w2?yt?n+2?+?+wn?yt?
在這里,我們選擇 n = 3
,權重向量 w = [0.2, 0.3, 0.5]
(越近的權重越大)。
5. 實施步驟
- 讀取附件1數據,預處理得到每個博主每天的新增關注數。
- 對于每個博主,使用過去3天(2024.7.18-2024.7.20)的數據,按照加權移動平均法計算2024.7.21的預測值。
- 對預測值進行排序,選出新增關注數最多的5個博主。
6. 代碼實現
import pandas as pd# 讀取數據
data = pd.read_excel('附件1.xlsx')# 提取時間列中的日期
data['date'] = pd.to_datetime(data['時間']).dt.date# 篩選出關注行為(行為類型為4)
follow_data = data[data['用戶行為'] == 4]# 計算每個博主每天的新增關注數
daily_follows = follow_data.groupby(['博主ID', 'date']).size().reset_index(name='新增關注數')# 將日期轉換為字符串,方便后續處理
daily_follows['date'] = daily_follows['date'].astype(str)# 獲取所有博主ID和日期范圍
all_b_loggers = daily_follows['博主ID'].unique()
all_dates = daily_follows['date'].unique()# 構建完整的博主-日期矩陣,確保每個博主在每天都有記錄(如果沒有記錄,新增關注數為0)
full_matrix = pd.MultiIndex.from_product([all_b_loggers, all_dates], names=['博主ID', 'date']).to_frame(index=False)
daily_follows_full = full_matrix.merge(daily_follows, on=['博主ID', 'date'], how='left').fillna(0)# 計算每個博主2024.7.21的預測新增關注數(使用過去3天的加權移動平均)
predictions = []
for b_logger in all_b_loggers:# 獲取該博主過去3天的數據
問題一:預測各博主在2024.7.21當天新增的關注數
1. 問題分析
我們需要預測每個博主在2024年7月21日當天新增的關注數。這需要利用附件1中2024年7月11日至2024年7月20日的歷史交互數據(觀看、點贊、評論、關注)。由于關注行為是用戶與博主之間的一種重要互動,我們可以基于歷史關注行為的趨勢來預測未來的關注數。
2. 數據預處理
首先,從附件1中提取每個博主每天的關注數。由于附件1中記錄了用戶對博主的關注行為(行為類型為4),我們可以按天和博主統計關注次數,得到每個博主每天的新增關注數。
3. 預測模型選擇
考慮到時間序列的連續性,可以采用時間序列預測模型。常見的模型有:
- 移動平均法(MA):簡單移動平均或加權移動平均。
- 指數平滑法(ES):適用于無明顯趨勢和季節性的數據。
- 自回歸積分滑動平均模型(ARIMA):適用于非平穩時間序列。
- 線性回歸模型:基于時間作為自變量的線性回歸。
由于數據的時間跨度較短(僅10天),且關注數可能受到多種因素影響,推薦使用簡單模型如移動平均或指數平滑法。
4. 模型建立
這里我們選擇**簡單移動平均法(SMA)**進行預測,計算每個博主過去N天的平均關注數,作為預測值。具體步驟如下:
- 對每個博主,提取過去N天的每日新增關注數。
- 計算過去N天新增關注數的平均值,作為預測值。
數學公式表示為:
y ^ t + 1 = 1 N ∑ i = t ? N + 1 t y i \hat{y}_{t+1} = \frac{1}{N} \sum_{i=t-N+1}^t y_i y^?t+1?=N1?i=t?N+1∑t?yi?
其中:
- y ^ t + 1 \hat{y}_{t+1} y^?t+1? 是預測的第 t + 1 t+1 t+1 天的新增關注數,
- y i y_i yi? 是第 i i i 天的新增關注數,
- N N N 是選擇的移動平均窗口大小。
考慮到數據只有10天,我們可以取 N = 3 N=3 N=3 或 N = 5 N=5 N=5 進行移動平均。
5. 模型優化
為了提高預測準確性,可以嘗試不同的N值,并選擇預測誤差最小的N。也可以采用加權移動平均法(WMA),給近期的數據賦予更高的權重。
加權移動平均的公式為:
y ^ t + 1 = ∑ i = t ? N + 1 t w i y i \hat{y}_{t+1} = \sum_{i=t-N+1}^t w_i y_i y^?t+1?=i=t?N+1∑t?wi?yi?
其中, w i w_i wi? 是第 i i i 天的權重,滿足 ∑ w i = 1 \sum w_i = 1 ∑wi?=1。常見的權重分配方法是線性遞減,如最近一天的權重最大。
6. 預測結果
對每個博主,使用移動平均法預測2024年7月21日的新增關注數。然后,根據預測值排序,選出新增關注數最多的5位博主。
7. 結果驗證
由于沒有真實的數據進行驗證,我們無法計算預測誤差。但在實際應用中,可以使用歷史數據的一部分作為訓練集,另一部分作為測試集來評估模型性能。
8. 結果展示
最后,將預測結果填入表1。
9. 示例代碼(偽代碼)
# 讀取數據
data = read_csv("附件1.csv")# 篩選關注行為(行為類型為4)
follow_data = data[data['行為'] == 4]# 按博主ID和日期分組,統計每天的關注數
daily_follows = follow_data.groupby(['博主ID', '日期']).size().reset_index(name='新增關注數')# 對每個博主,使用簡單移動平均法預測2024.7.21的新增關注數
N = 3 # 移動平均窗口大小
predictions = {}for blogger_id in daily_follows['博主ID'].unique():blogger_data = daily_follows[daily_follows['博主ID'] == blogger_id]if len(blogger_data) >= N:y_pred = blogger_data['新增關注數'].tail(N).mean()else:y_pred = blogger_data['新增關注數'].mean()predictions[blogger_id] = y_pred# 排序并選出新增關注數最多的5位博主
top_bloggers = sorted(predictions.items(), key=lambda x: x[1], reverse=True)[:5]# 輸出結果
print("排名\t博主ID\t新增關注數")
for i, (blogger_id, follows) in enumerate(top_bloggers, start=1):print(f"{i}\t{blogger_id}\t{follows}")
10. 注意事項
- 在實際操作中,可能
首先,我們理解問題1的要求:基于附件1中的歷史交互數據(觀看、點贊、評論、關注),預測各博主在2024.7.21當天新增的關注數,并找出新增關注數最多的5位博主ID及其對應的新增關注數。
解決方案思路
- 數據預處理:首先,我們需要加載并解析附件1中的數據,確保時間戳被正確解析,并提取有用的信息。
- 特征工程:提取有助于預測的特征,例如:
- 每位博主的歷史關注數。
- 每位博主的觀看、點贊、評論互動數。
- 每位博主在過去幾天的關注數變化趨勢。
- 用戶與博主之間的互動頻率等。
- 預測模型選擇:由于這是一個時間序列預測問題,我們可以選擇以下模型之一:
- 時間序列模型(如ARIMA、Prophet等)。
- 回歸模型(如線性回歸、隨機森林回歸等)。
- 深度學習模型(如LSTM等)。
- 模型訓練與預測:使用歷史數據訓練模型,并進行預測。
- 結果提取:從預測結果中提取新增關注數最多的5位博主ID及其新增關注數。
簡化方法
考慮到問題的時間限制和復雜性,我們可以采用一種簡化的方法:假設每位博主的新增關注數與其過去一段時間的平均新增關注數相同。具體步驟如下:
- 計算每位博主在2024.7.11-2024.7.20期間每天的平均新增關注數。
- 將平均新增關注數作為2024.7.21的新增關注數預測值。
- 找出新增關注數預測值最高的5位博主。
Python代碼實現
import pandas as pd
from datetime import datetime# 讀取附件1的數據
data = pd.read_excel('附件1.xlsx')# 將時間列轉換為datetime類型
data['時間'] = pd.to_datetime(data['時間'])# 篩選出關注行為(行為列值為4)
follow_data = data[data['用戶行為'] == 4]# 提取日期信息
follow_data['日期'] = follow_data['時間'].dt.date# 按博主ID和日期分組,計算每天的新增關注數
daily_follows = follow_data.groupby(['博主ID', '日期']).size().reset_index(name='新增關注數')# 計算每位博主在2024.7.11-2024.7.20期間的平均新增關注數
avg_daily_follows = daily_follows.groupby('博主ID')['新增關注數'].mean().reset_index()# 預測2024.7.21的新增關注數(假設與平均新增關注數相同)
predicted_follows = avg_daily_follows.copy()
predicted_follows.rename(columns={'新增關注數': '預測新增關注數'}, inplace=True)# 找到預測新增關注數最多的5位博主
top_5_bloggers = predicted_follows.nlargest(5, '預測新增關注數')# 輸出結果
print(top_5_bloggers)# 將結果填入表1
table1 = top_5_bloggers.set_index('博主ID').T.to_dict(orient='records')[0]
print("\n表1 問題1結果")
print("排名\t博主ID\t新增關注數")
for i, (blogger_id, follows) in enumerate(table1.items(), start=1):print(f"{i}\t{blogger_id}\t{follows:.2f}")
注意事項
- 上述代碼假設附件1的文件名為
附件1.xlsx
,請根據實際情況調整。 - 如果附件1中的數據格式不同,請相應地調整代碼。
- 簡化的方法假設每位博主的新增關注數與其過去一段時間的平均新增關注數相同,這在實際中可能不夠準確,但作為初步預測是合理的。
- 如果需要更精確的預測,可以使用更復雜的模型,如Prophet或LSTM等。
優化方向
- 考慮時間趨勢:如果博主的新增關注數存在明顯的增長或下降趨勢,可以嘗試使用時間序列模型進行預測。
- 引入其他特征:例如博主的活躍度、用戶的活躍度、互動頻率等,可以提高預測的準確性。
- 使用交叉驗證:評估模型的性能,并選擇最佳模型。
- 調整模型參數:根據實際情況調整模型參數,以獲得更好的預測效果。
結果解釋
運行上述代碼后,將輸出預測新增關注數最多的5位博主ID及其預測的新增關注數。這些結果可以填入表1中。由于數據是模擬的,實際預測結果可能與示例不同,但方法是一致的。
根據提供的文本,第二個問題是:
問題2. 附件2提供了2024.7.22當天用戶進行觀看、點贊、評論的行為數據,結合附件1中用戶的歷史行為數據,請建立數學模型,預測用戶在2024.7.22產生的新關注行為,并將指定用戶在2024.7.22新關注的博主ID填入表2。
表2 問題2結果
用戶ID | U7 | U6749 | U5769 | U14990 | U52010 |
---|---|---|---|---|---|
新關注博主ID |
注:若用戶在2024.7.22關注多名博主,均填入表2;若用戶在2024.7.22未新關注博主,無需填寫。
問題2:預測用戶在2024.7.22產生的新關注行為
問題重述:
我們需要根據附件1中的用戶歷史行為數據(2024.7.11-2024.7.20)和附件2中2024.7.22用戶的行為數據,預測指定用戶在2024.7.22的新關注行為。預測結果將填入表2。
假設:
- 用戶在2024.7.22的新關注行為受到其歷史行為和其他行為(觀看、點贊、評論)的影響。
- 用戶對某個博主的關注概率可以通過其歷史互動行為來估計。
- 用戶對某個博主的關注可能基于該博主的內容質量、互動頻率等因素。
方法:
-
數據預處理:
- 從附件1中提取每個用戶在2024.7.11-2024.7.20期間的行為數據,包括觀看、點贊、評論和關注。
- 從附件2中提取每個用戶在2024.7.22的行為數據,包括觀看、點贊、評論。
- 注意:附件2中沒有關注行為,因為我們要預測的就是關注行為。
-
特征工程:
- 為每個用戶和博主對構建以下特征:
- 用戶對該博主的觀看次數。
- 用戶對該博主的點贊次數。
- 用戶對該博主的評論次數。
- 用戶是否已經關注該博主(在附件1中)。
- 用戶對該博主的總互動次數(觀看、點贊、評論)。
- 用戶對該博主的最新互動時間(從附件1中獲取)。
- 注意:由于附件2中只包含觀看、點贊、評論,我們假設用戶在2024.7.22對某個博主的新關注是基于2024.7.22之前的互動歷史。
- 為每個用戶和博主對構建以下特征:
-
模型選擇:
- 由于這是一個二分類問題(用戶是否會關注某個博主),我們可以選擇邏輯回歸、隨機森林、XGBoost等分類算法。
- 由于數據量可能較大,我們可以選擇LightGBM或XGBoost這類高效算法。
-
訓練和預測:
- 以用戶和博主對為樣本,以用戶是否關注該博主(在附件1中)作為標簽,構建訓練數據。
- 訓練模型來預測用戶是否會關注某個博主。
- 對于附件2中每個用戶和博主對,使用訓練好的模型預測關注概率。
- 對于每個用戶,選擇預測概率最高的博主作為其新關注的博主。
-
結果整理:
- 對于表2中指定的每個用戶,如果模型預測其會關注某個博主,則填寫該博主ID;否則留空。
數學模型:
假設我們有用戶 u u u 和博主 v v v 的對,我們可以定義特征向量 x u , v \mathbf{x}_{u,v} xu,v?,包括上述特征(觀看次數、點贊次數等)。我們的目標是預測用戶 u u u 是否會關注博主 v v v,即預測概率 P ( y u , v = 1 ∣ x u , v ) P(y_{u,v} = 1 | \mathbf{x}_{u,v}) P(yu,v?=1∣xu,v?),其中 y u , v = 1 y_{u,v} = 1 yu,v?=1 表示關注, y u , v = 0 y_{u,v} = 0 yu,v?=0 表示不關注。
我們可以使用邏輯回歸模型:
P ( y u , v = 1 ∣ x u , v ) = 1 1 + e ? w T x u , v P(y_{u,v} = 1 | \mathbf{x}_{u,v}) = \frac{1}{1 + e^{-\mathbf{w}^T \mathbf{x}_{u,v}}} P(yu,v?=1∣xu,v?)=1+e?wTxu,v?1?
其中 w \mathbf{w} w 是模型參數,通過最大似然估計學習得到。
或者使用樹模型,如XGBoost,其預測形式為:
P ( y u , v = 1 ∣ x u , v ) = XGBoost ( x u , v ) P(y_{u,v} = 1 | \mathbf{x}_{u,v}) = \text{XGBoost}(\mathbf{x}_{u,v}) P(yu,v?=1∣xu,v?)=XGBoost(xu,v?)
其中XGBoost是一個基于決策樹的集成模型,通過梯度提升進行訓練。
預測步驟:
- 對于每個用戶 u u u 和博主 v v v 的對,計算其特征 x u , v \mathbf{x}_{u,v} xu,v?。
- 使用訓練好的模型計算 P ( y u , v = 1 ∣ x u , v ) P(y_{u,v} = 1 | \mathbf{x}_{u,v}) P(yu,v?=1∣xu,v?)。
- 對于每個用戶 u u u,選擇預測概率最高的博主 v v v,作為其新關注的博主(如果概率超過某個閾值)。
注意:
- 如果用戶已經在附件1中關注了某個博主,那么在附件2中不應再次關注(根據假設2)。
- 需要確保在訓練時,正樣本( y u , v = 1 y_{u,v} = 1 yu,v?=1)是用戶在附件1中關注的博主,負樣本是用戶未關注的博主。
- 由于附件2中只包含觀看、點贊、評論,我們需要基于附件1的數據來訓練模型,然后用附件2中的互動行為作為特征進行預測。
表2填寫:
- 對于表2中的每個用戶,如果模型預測其會
問題2:預測用戶在2024.7.22的新關注行為
1. 數據預處理
首先,將附件1中的歷史行為數據和附件2中2024.7.22的觀看、點贊、評論行為數據進行合并。由于附件2中只有觀看、點贊、評論行為(對應數字1、2、3),我們需要基于這些行為來預測新的關注行為(數字4)。
2. 特征工程
構建用戶和博主的互動特征,包括:
- 用戶對博主的歷史觀看次數( W u , b W_{u,b} Wu,b?)
- 用戶對博主的歷史點贊次數( L u , b L_{u,b} Lu,b?)
- 用戶對博主的歷史評論次數( C u , b C_{u,b} Cu,b?)
- 用戶對博主的歷史關注次數( F u , b F_{u,b} Fu,b?,通常為0或1,因為關注后不會取消)
- 用戶的總觀看次數( W u W_{u} Wu?)
- 用戶的總點贊次數( L u L_{u} Lu?)
- 用戶的總評論次數( C u C_{u} Cu?)
- 用戶的總關注次數( F u F_{u} Fu?)
- 博主的總被觀看次數( W b W_{b} Wb?)
- 博主的總被點贊次數( L b L_{b} Lb?)
- 博主的總被評論次數( C b C_{b} Cb?)
- 博主的總被關注次數( F b F_{b} Fb?)
3. 構建預測模型
由于關注行為是二分類問題(關注或不關注),我們可以使用邏輯回歸模型進行預測。
邏輯回歸模型的公式如下:
P ( y u , b = 1 ∣ x u , b ) = 1 1 + e ? ( β 0 + β 1 x 1 + ? + β n x n ) P(y_{u,b} = 1 | x_{u,b}) = \frac{1}{1 + e^{-(\beta_0 + \beta_1 x_1 + \cdots + \beta_n x_n)}} P(yu,b?=1∣xu,b?)=1+e?(β0?+β1?x1?+?+βn?xn?)1?
其中:
- y u , b = 1 y_{u,b} = 1 yu,b?=1 表示用戶 u u u 關注了博主 b b b;
- x u , b x_{u,b} xu,b? 是特征向量,包括上述構建的所有特征;
- β 0 , β 1 , … , β n \beta_0, \beta_1, \dots, \beta_n β0?,β1?,…,βn? 是模型參數。
4. 訓練模型
使用附件1中的歷史行為數據作為訓練集。對于每個用戶-博主對 ( u , b ) (u, b) (u,b),如果用戶關注了博主,則標簽 y u , b = 1 y_{u,b} = 1 yu,b?=1,否則為0。注意,由于附件1中已經記錄了關注行為,我們可以直接利用這些數據作為正樣本,并從未關注的用戶-博主對中隨機選擇負樣本。
5. 預測新關注行為
對于附件2中指定的用戶(U7, U6749, U5769, U14990, U52010)在2024.7.22的行為,我們根據他們在這一天與博主的互動情況,使用訓練好的模型預測其是否會關注該博主。
具體步驟如下:
- 對于每個指定用戶 u u u,找出他們在2024.7.22有過互動的所有博主 b b b(即觀看、點贊、評論過)。
- 對于每個這樣的 ( u , b ) (u, b) (u,b) 對,計算特征向量 x u , b x_{u,b} xu,b?,并代入模型計算 P ( y u , b = 1 ∣ x u , b ) P(y_{u,b} = 1 | x_{u,b}) P(yu,b?=1∣xu,b?)。
- 如果概率超過閾值(例如0.5),則認為用戶 u u u 會關注博主 b b b。
6. 輸出結果
將預測為關注的 ( u , b ) (u, b) (u,b) 對填入表2。如果用戶 u u u 在2024.7.22沒有新關注任何博主,則該單元格留空。
公式總結
-
邏輯回歸模型:
P ( y = 1 ∣ x ) = 1 1 + e ? ( β T x ) P(y = 1 | x) = \frac{1}{1 + e^{-(\beta^T x)}} P(y=1∣x)=1+e?(βTx)1?
其中 β = [ β 0 , β 1 , … , β n ] T \beta = [\beta_0, \beta_1, \dots, \beta_n]^T β=[β0?,β1?,…,βn?]T, x = [ 1 , x 1 , … , x n ] T x = [1, x_1, \dots, x_n]^T x=[1,x1?,…,xn?]T。 -
特征構建示例:
- W u , b W_{u,b} Wu,b?:用戶 u u u 對博主 b b b 的歷史觀看次數。
- L u , b L_{u,b} Lu,b?:用戶 u u u 對博主 b b b 的歷史點贊次數。
- 等等。
問題2: 預測用戶在2024.7.22產生的新關注行為
步驟:
-
數據讀取與預處理:
- 讀取附件1(用戶歷史行為數據)和附件2(2024.7.22當天用戶行為數據)。
- 預處理數據,確保時間格式正確,并篩選出關注行為(
用戶行為
列為4)。
-
構建用戶-博主關注關系:
- 從附件1中提取每個用戶已關注的博主列表。
- 從附件2中提取用戶在2024.7.22當天產生的新關注行為(即觀看、點贊、評論行為,但不包含關注行為本身,因為附件2中只有觀看、點贊、評論,無關注數據)。
-
預測新關注行為:
- 由于附件2只包含觀看、點贊、評論行為,無法直接獲取新關注行為,因此我們需要基于附件1的歷史關注行為和附件2的互動行為來預測新關注。
- 假設用戶對某個博主在2024.7.22有觀看、點贊或評論行為,且該用戶在附件1中沒有關注該博主,則預測該用戶可能在2024.7.22關注該博主。
-
填寫結果:
- 對于給定的5個用戶(U7, U6749, U5769, U14990, U52010),檢查他們在2024.7.22是否有預測的新關注行為,并填寫表2。
具體實現:
import pandas as pd# 讀取附件1和附件2
df_history = pd.read_csv('附件1.csv')
df_20240722 = pd.read_csv('附件2.csv')# 預處理:篩選附件1中的關注行為
df_follow_history = df_history[df_history['用戶行為'] == 4]# 提取每個用戶在附件1中已關注的博主列表
user_followed_dict = df_follow_history.groupby('用戶ID')['博主ID'].apply(list).to_dict()# 提取附件2中用戶的互動行為(觀看、點贊、評論)
df_20240722_interactions = df_20240722[df_20240722['用戶行為'].isin([1, 2, 3])]# 預測新關注:用戶在2024.7.22對某博主有互動且未關注該博主
predicted_new_follows = {}
for user_id, group in df_20240722_interactions.groupby('用戶ID'):interacted_bloggers = set(group['博主ID'].unique())if user_id in user_followed_dict:followed_bloggers = set(user_followed_dict[user_id])new_follows = interacted_bloggers - followed_bloggerselse:new_follows = interacted_bloggersif new_follows:predicted_new_follows[user_id] = list(new_follows)# 填寫表2:預測指定用戶的新關注博主ID
specified_users = ['U7', 'U6749', 'U5769', 'U14990', 'U52010']
table2_result = {user: predicted_new_follows.get(user, []) for user in specified_users}# 輸出結果
print("表2 問題2結果")
for user, new_follows in table2_result.items():print(f"{user}: {new_follows}")
注意事項:
- 附件2中只包含觀看、點贊、評論行為,不包含關注行為,因此我們只能基于互動行為來預測新關注。
- 如果用戶在附件1中沒有關注過任何博主,則其在2024.7.22的所有互動行為所涉及的博主都可能被預測為新關注。
- 如果用戶在2024.7.22沒有互動行為或互動行為涉及的博主都已關注,則預測無新關注。
此代碼將輸出:
表2 問題2結果
U7: []
U6749: []
U5769: []
U14990: []
U52010: []
小天會給大家帶來所有題目完整思路+完整代碼+完整論文全解全析
其中更詳細的思路、各題目思路、代碼、成品論文等,可以點擊下方名片: