计算实体频率和新近度的算法?
Algorithm to calculate frequency and recency of an entity?
我有一个由不同用户打开的实体列表。
我通过如下存储访问日期和时间来跟踪任何实体的每次访问:
public class Entity
{
public int Id { get; set; }
public virtual ICollection<AccessInfo> Accesses { get; set; }
= new HashSet<AccessInfo>();
}
public class AccessInfo
{
public int Id { get; set; }
public AccessInfoType Type { get; set; }
public User User { get; set; }
public DateTime DateTime { get; set; }
}
public enum AccessInfoType
{
Create,
Read,
Update,
Delete,
}
现在我正在尝试制作一种算法,根据新近度和频率这两个因素来过滤最想要的联系人。
我希望昨天访问 5 次的联系人优先于一周前访问 30 次的联系人。但另一方面,今天只访问过一次的用户就不那么重要了。
这个有正式名称吗?我敢肯定,人们以前曾进行过类似这样的频率计算,我想在花一些时间编码之前先阅读一下。
我想过计算最近一个月访问日期的总和并相应排序,但我仍然不确定这种方法是否正确,我想向专家学习。
return Entities
.OrderBy(c =>
c.Accesses
.Where(a => a.Employee.UserName == UserName)
.Where(a => a.DateTime > lastMonth)
.Select(a => a.DateTime.Ticks)
.Sum());
我会使用一种启发式方法,将点分配给实体以供访问,并对这些点使用某种衰减。
例如,您可以在每次访问某个实体时给它 1 分,并且每天一次将所有分数乘以 0.8 的系数
指数衰减正是您要找的。看到这个 link:
http://www.evanmiller.org/rank-hotness-with-newtons-law-of-cooling.html
我有一个由不同用户打开的实体列表。 我通过如下存储访问日期和时间来跟踪任何实体的每次访问:
public class Entity
{
public int Id { get; set; }
public virtual ICollection<AccessInfo> Accesses { get; set; }
= new HashSet<AccessInfo>();
}
public class AccessInfo
{
public int Id { get; set; }
public AccessInfoType Type { get; set; }
public User User { get; set; }
public DateTime DateTime { get; set; }
}
public enum AccessInfoType
{
Create,
Read,
Update,
Delete,
}
现在我正在尝试制作一种算法,根据新近度和频率这两个因素来过滤最想要的联系人。
我希望昨天访问 5 次的联系人优先于一周前访问 30 次的联系人。但另一方面,今天只访问过一次的用户就不那么重要了。
这个有正式名称吗?我敢肯定,人们以前曾进行过类似这样的频率计算,我想在花一些时间编码之前先阅读一下。
我想过计算最近一个月访问日期的总和并相应排序,但我仍然不确定这种方法是否正确,我想向专家学习。
return Entities
.OrderBy(c =>
c.Accesses
.Where(a => a.Employee.UserName == UserName)
.Where(a => a.DateTime > lastMonth)
.Select(a => a.DateTime.Ticks)
.Sum());
我会使用一种启发式方法,将点分配给实体以供访问,并对这些点使用某种衰减。
例如,您可以在每次访问某个实体时给它 1 分,并且每天一次将所有分数乘以 0.8 的系数
指数衰减正是您要找的。看到这个 link:
http://www.evanmiller.org/rank-hotness-with-newtons-law-of-cooling.html