Skip to content

Latest commit

 

History

History
110 lines (74 loc) · 4.13 KB

Score 算法设计.md

File metadata and controls

110 lines (74 loc) · 4.13 KB

用户分数计算算法

背景与目标

为了评估 GitHub 用户的技术能力和影响力,建立一个合理的评分机制是必要的。该算法基于用户的公开数据,如粉丝数量、仓库信息、pr 和 issue 等,综合考虑多项指标,计算出用户的个人资料得分。


算法设计与实现

核心思路

  1. 指标权重设定:根据各项指标对用户技术能力的反映程度,设定相应的权重,总权重为 100%。
  2. 数量型数据处理:对于涉及数量的指标,使用指数增长模型计算得分,使得在关键点之前得分增长较快,之后趋于平缓。
  3. 数组型数据处理:对于数组类型的数据(如仓库列表),采用指数衰减模型,强调重要性较高的前几个元素。
  4. 总分计算:将各部分得分按照权重汇总,得到用户的最终得分。

指标权重

  1. 用户基本信息(占比 30%

    • github_user_id (不涉及技术能力):0%
    • followers(粉丝数):8%
    • public_repos(公开仓库数):2%
    • commit_amount(提交数):5%
    • pr_amount(拉取请求数):10%
    • issue_amount(问题数):5%
    • repo_amount (已经被 public_repos 包含,无需单独计算):0%
    • type (不直接反映技术能力) :0%
  2. 仓库信息(占比 50%

    • name (不涉及技术能力):0%
    • is_forked(是否为 fork):5%
    • stars(星标数):20%
    • forks(被 fork 数):15%
    • watchers(关注者数):5%
    • open_issues(未解决问题数):5%
  3. 拉取请求(占比 15%

    • pr_and_issue_amount(拉取请求和问题总数):15%
  4. 问题(占比 5%

    • pr_and_issue_amount(拉取请求和问题总数):5%

主要公式

1. 数量型数据的得分计算

对于涉及数量的指标,使用以下指数增长公式计算得分:

$$ y = \text{MaxScore} \left(1 - e^{-\frac{2.5x}{\text{CriticalPoint}}}\right) $$

其中:

  • $ y $:该指标的得分。
  • $ x $:该指标的实际值。
  • $\text{MaxScore}$:该指标的最高得分(根据权重确定,如 8、10、15 等)。
  • $\text{CriticalPoint}$:关键点,取值为 1000,表示在该值附近得分增长开始趋于平缓。

2. 数组型数据的得分计算

对于数组类型的数据(如仓库列表、拉取请求列表等),使用**性能点数(Performance Point,PP)**的指数衰减模型:

$$ \text{PP} = \sum_{i=1}^{m} \text{pp}_i \times 0.7^{(i-1)} $$

其中:

  • $ \text{PP} $:总的性能点数。
  • $ \text{pp}_i $:按照指标排序后的第 $ i $ 个元素的得分。
  • $ m $:取前 3 个元素(如果少于 3 个,则取所有元素)。
  • $ 0.7 $:衰减系数,表示位置越靠后,权重越低。

总分汇总

将各部分得分相加,得到用户的最终得分:

$$ \text{TotalScore} = \text{UserScore} + \text{RepoScore} + \text{PRScore} + \text{IssueScore} $$

其中:

  • $ \text{UserScore} $ 为用户基本信息得分之和。
  • $ \text{RepoScore} $ 为仓库总得分。
  • $ \text{PRScore} $ 为拉取请求总得分。
  • $ \text{IssueScore} $ 为问题总得分。

注意事项

  • 数组数据处理:对于数组型数据,采用指数衰减模型,强调前几个重要元素的影响。
  • 关键点设置:关键点(CriticalPoint)设为 1000,表示在此值附近,得分增长开始放缓,体现指标的边际效应递减。
  • 得分上限:所有指标得分均有最高限制,避免某一指标对总分过度影响。
  • 权重总和:所有指标的权重之和为 100%,确保总分在 0 到 100 之间。
  • 边际效应:防止某一指标对总分的过度影响,使评分系统对数据异常具有鲁棒性

总结

该算法通过对多项指标的综合评估,客观地反映了 GitHub 用户的技术能力、活跃度和影响力。采用指数增长和指数衰减模型,使得评分既能体现指标的重要性,又能防止个别指标对总分的过度影响,确保评分的公平性和合理性。