为了评估 GitHub 用户的技术能力和影响力,建立一个合理的评分机制是必要的。该算法基于用户的公开数据,如粉丝数量、仓库信息、pr 和 issue 等,综合考虑多项指标,计算出用户的个人资料得分。
- 指标权重设定:根据各项指标对用户技术能力的反映程度,设定相应的权重,总权重为 100%。
- 数量型数据处理:对于涉及数量的指标,使用指数增长模型计算得分,使得在关键点之前得分增长较快,之后趋于平缓。
- 数组型数据处理:对于数组类型的数据(如仓库列表),采用指数衰减模型,强调重要性较高的前几个元素。
- 总分计算:将各部分得分按照权重汇总,得到用户的最终得分。
-
用户基本信息(占比 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%
-
仓库信息(占比 50%)
name
(不涉及技术能力):0%is_forked
(是否为 fork):5%stars
(星标数):20%forks
(被 fork 数):15%watchers
(关注者数):5%open_issues
(未解决问题数):5%
-
拉取请求(占比 15%)
pr_and_issue_amount
(拉取请求和问题总数):15%
-
问题(占比 5%)
pr_and_issue_amount
(拉取请求和问题总数):5%
对于涉及数量的指标,使用以下指数增长公式计算得分:
其中:
- $ y $:该指标的得分。
- $ x $:该指标的实际值。
-
$\text{MaxScore}$ :该指标的最高得分(根据权重确定,如 8、10、15 等)。 -
$\text{CriticalPoint}$ :关键点,取值为 1000,表示在该值附近得分增长开始趋于平缓。
对于数组类型的数据(如仓库列表、拉取请求列表等),使用**性能点数(Performance Point,PP)**的指数衰减模型:
其中:
- $ \text{PP} $:总的性能点数。
- $ \text{pp}_i $:按照指标排序后的第 $ i $ 个元素的得分。
- $ m $:取前 3 个元素(如果少于 3 个,则取所有元素)。
- $ 0.7 $:衰减系数,表示位置越靠后,权重越低。
将各部分得分相加,得到用户的最终得分:
其中:
- $ \text{UserScore} $ 为用户基本信息得分之和。
- $ \text{RepoScore} $ 为仓库总得分。
- $ \text{PRScore} $ 为拉取请求总得分。
- $ \text{IssueScore} $ 为问题总得分。
- 数组数据处理:对于数组型数据,采用指数衰减模型,强调前几个重要元素的影响。
- 关键点设置:关键点(CriticalPoint)设为 1000,表示在此值附近,得分增长开始放缓,体现指标的边际效应递减。
- 得分上限:所有指标得分均有最高限制,避免某一指标对总分过度影响。
- 权重总和:所有指标的权重之和为 100%,确保总分在 0 到 100 之间。
- 边际效应:防止某一指标对总分的过度影响,使评分系统对数据异常具有鲁棒性
总结
该算法通过对多项指标的综合评估,客观地反映了 GitHub 用户的技术能力、活跃度和影响力。采用指数增长和指数衰减模型,使得评分既能体现指标的重要性,又能防止个别指标对总分的过度影响,确保评分的公平性和合理性。