两列基于另一列的匹配程度

How much two columns match based on another column

如果我的数据框是这样的:

user   item   real   value  predict
  u1     i1    0.0    0.31      0.0
  u2     i1    1.0    0.50      0.0
  u1     i2    0.0    0.27      0.0
  u3     i2    0.0    0.91      0.0
  u1     i3    1.0    0.71      1.0
  u3     i3    0.0    0.80      1.0

如何确定每个用户的 predictreal 相比的准确性?例如:

u1   1.00
u2   0.00
u3   0.50

我正在考虑按用户分组,将数据帧拆分为多个用户相同的列,将这两列转换为列表,然后查看它们匹配的程度。但是我有成千上万的用户。有没有更好的方法呢?

如果您使用 sklearn,您可以轻松使用 mean_squared_error

from sklearn.metrics import mean_squared_error

mse = df.groupby('user').apply(lambda x: mean_squared_error(x['real'], x['predict']))
acc = 1 - mse
print(acc)

# Output:
user
u1    1.0
u2    0.0
u3    0.5
dtype: float64

注意:如果您不能或不想使用sklearn,请改用:

mean_square_error = lambda r, p: (np.linalg.norm(r-p)**2)/len(r)

这个怎么样?因为这是一个分类问题,所以可以。

创建另一列 Diff 如果 realpredict 匹配则为 True,否则为 False;然后 user 上的 groupby 并找到每个 user:

Diff 的平均值
out = df.assign(Diff=df['real']==df['predict']).groupby('user')['Diff'].mean()

输出:

user
u1    1.0
u2    0.0
u3    0.5
Name: Diff, dtype: float64