Files
huangguo_server/common/usertruth/userTruth.go
T
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

179 lines
7.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package usertruth
var routers100DIC = map[string]byte{}
// NDArg 正态分布参数
type NDArg struct {
Mu float64 //期望
Sigma float64 //方差
}
// 2020-01-16 注册后20分钟用户请求模型
var routersND = map[string]NDArg{
"/api/app/mine/info": {26.407859530084107, 26.275135225050672},
"/api/app/vid/play": {21.995098927091213, 22.763576665825333},
"/api/app/vid/m3u8": {21.38402911495771, 16.07871338083366},
"/api/app/inform/preview": {21.104663191415995, 22.311287968524443},
"/api/app/search/list": {16.43460478349782, 16.772572660528393},
"/api/app/tag/vid/list": {10.967752839372634, 13.369935046469067},
"/api/app/vid/user/count": {9.896102719033232, 3.4429093551189482},
"/api/app/tone/vid/list": {8.743154857326067, 9.65069066828318},
"/api/app/mine/collection": {6.536321436569823, 7.610521407156875},
"/api/app/vid/location/list": {5.338658762504632, 5.621848968877574},
"/api/app/code/exchange": {5.1810193321616875, 5.485312496520593},
"/api/app/mine/like": {4.867128098122042, 4.933705582783718},
"/api/app/mine/buyVid": {4.767059446038627, 4.724878728679717},
"/api/app/comment/list": {4.64976856062903, 5.359347112149345},
"/api/app/tag/related/list": {4.615384615384615, 6.7392728011548915},
"/api/app/wonder/vid/list": {4.315633958103638, 3.7338462032373845},
"/api/app/mine/txnact/zfb/get": {4, 0},
"/api/app/mine/qianbao": {3.4738025246411897, 3.1117706785490036},
"/api/app/mine/collect/infoList": {3.204887218045113, 1.020198360787845},
"/api/app/mine/wallet": {2.996144238079722, 2.586675640022099},
"/api/app/vip/vipTypeList": {2.968098724973117, 2.484641338810541},
"/api/app/vid/uploadDotStream": {2.918918918918919, 3.8222610385593505},
"/api/app/vid/hot/list": {2.875, 1.8850918886280925},
"/api/app/mine/mobileLogin": {2.726661392405063, 1.6229608705686391},
"/api/app/ads/click": {2.4444444444444446, 2.1481105849018385},
"/api/app/im/sign": {2.347451944568619, 0.8751527848778612},
"/api/app/mine/collect": {2.3469945355191255, 2.9005078540123854},
"/api/app/thumbsUp": {2.2889385712764825, 3.1431258095942107},
"/api/app/mine/rchg": {2.1419141914191417, 2.013939575838625},
"/api/app/tag/info": {2.1227564333597635, 2.5561450060499316},
"/api/app/mine/recharge": {2.0362889421431016, 1.6761985460556246},
"/api/app/search/wonder/list": {2, 1.3228756555322954},
"/api/app/mine/txnact/alipay/add": {2, 1.4142135623730951},
"/api/app/comment/send": {1.913767019667171, 2.5678041294299385},
"/api/app/mine/follow": {1.8853146853146854, 3.3834188159801752},
"/api/app/hotspot/hotvid/list": {1.865814696485623, 2.5320789429330213},
"/api/app/tag/group": {1.7860714285714285, 1.8002080767465662},
"/api/app/mine/rchgTypeList": {1.6759002770083102, 1.2730164933835963},
"/api/app/recommend/vid/list": {1.6304768202631077, 1.0233659536842432},
"/api/app/mine/rechargeTypeList": {1.5427667889853516, 1.1205787585984197},
"/api/app/vid/uploadStatic": {1.449820788530466, 0.9225822223810688},
"/api/app/search/index": {1.4444444444444444, 1.1823747080552576},
"/api/app/comment/info": {1.4204250907205807, 0.935701317800514},
"/api/app/follow/list": {1.3652118833265838, 0.7420120249349482},
"/api/app/follow/dynamics/list": {1.365148416167447, 0.741941284686654},
"/api/app/tag/list": {1.3538640846333154, 0.7232666995832582},
"/api/app/thumbsDown": {1.2926500337154416, 0.9039536361790543},
"/api/app/mine/txnact/alipay/get": {1.2666666666666666, 0.7037315505489967},
"/api/app/vip/history": {1.2410660205935797, 0.6937188863036616},
"/api/app/proxy/bindRecord": {1.2203389830508475, 0.8586970175032882},
"/api/app/vid/location/info": {1.1945846718678292, 0.6303093874119001},
"/api/app/mine/txnact/bank/get": {1.1666666666666667, 0.408248290463863},
"/api/app/vid/remove": {1.16, 0.4725815626252608},
"/api/app/product/buy": {1.1565881604073838, 0.6167973028410264},
"/api/app/mine/rchg/order": {1.1441048034934498, 0.45999876756469205},
"/api/app/mine/bills": {1.1328273244781784, 0.4869047253532734},
"/api/app/proxy/bind": {1.131694468832309, 0.5337846350555656},
"/api/app/proxy/info": {1.1218504750103264, 0.4259428578212287},
"/api/app/proxy/incomes": {1.1214876033057852, 0.42565643424200655},
"/api/app/hotspot/wonder/list": {1.1149991246498598, 0.37056247336640125},
"/api/app/hotspot/area": {1.1148807964369924, 0.37156235329843224},
"/api/app/mine/income/works": {1.1128472222222223, 0.39046222453941565},
"/api/app/hotspot/rank": {1.101991604894168, 0.3479544659830258},
"/api/app/vid/submit": {1.09478672985782, 0.35257059679988395},
"/api/app/tag/add/new": {1.0909090909090908, 0.29424494316824984},
"/api/app/hotspot/htag": {1.0888888888888888, 0.35548299425426816},
"/api/app/withdraw/type": {1.088, 0.3363945456195459},
"/api/app/rank/hotsearch/list": {1.0820793433652531, 0.3332596161826353},
"/api/app/inform/notice/list": {1.0557451649601821, 0.25750413145206313},
"/api/app/recommend/user/list": {1.0482115085536547, 0.24806240809464628},
"/api/app/follow/fans/list": {1.0432766615146831, 0.22529050210078802},
"/api/app/comment/reply/list": {1.0383064516129032, 0.19212883629499877},
"/api/app/like/record/list": {1.0357142857142858, 0.1857721136109739},
"/api/app/withdraw/order": {1, 0},
"/api/app/mine/txnact/yh/get": {1, 0},
"/api/app/mine/txnact/zfb/add": {1, 0},
"/api/app/mine/report/types/list": {1, 0},
"/api/app/mine/report": {1, 0},
}
var qCountND = NDArg{
18.87662,
3.6234249913154857,
}
// truthPR 分析路由请求数映射,返回用户真实度[0,100],得分越高用户越接近真实用户,反之越接近异常用户(score < 1)
// 注意仅评价routersND中存在的router
// @定义 用户真实度-用户是真实用户的概率
func truthPR(qCountMap map[string]int64, routersND map[string]NDArg) float64 {
var scode float64
var count int
for router, qCount := range qCountMap {
ndArg, ok := routersND[router]
if !ok {
continue //仅评价routersND中存在的router
}
if _, ok = routers100DIC[router]; ok { //真实用户标志性的请求直接返回100分
return 100
}
if ndArg.Sigma == 0 {
continue //用户访问数不服从正态分布
}
//用户访问数服从正态分布
scode += NormalDistributionPR(float64(qCount), ndArg.Mu, ndArg.Sigma)
count++
}
if count != 0 {
scode = scode / float64(count)
}
qCountScode := NormalDistributionPR(float64(len(qCountMap)), qCountND.Mu, qCountND.Sigma)
return scode*50 + qCountScode*50
}
// NormalDistributionPR 通过积分获取标准正态分布概率(0,1)
func NormalDistributionPR(a, μ, σ float64) float64 {
code := 0.01 //概率得分
if σ == 0 { //方差为零 不评分
return 0
}
z := (a - μ) / σ //标准正态分布Z分数
if z >= 3 {
code += 0.01
}
if z >= 2.5 {
code += 0.49
}
if z >= 2 {
code += 1.66
}
if z >= 1.5 {
code += 4.4
}
if z >= 1 {
code += 9.19
}
if z >= 0.5 {
code += 14.98
}
if z >= 0 {
code += 19.15
}
if z >= -0.5 {
code += 19.15
}
if z >= -1 {
code += 14.98
}
if z >= -1.5 {
code += 9.19
}
if z >= -2 {
code += 4.4
}
if z >= -2.5 {
code += 1.66
}
if z >= -3 {
code += 0.49
}
return code / 100
}
// Score 返回出现该用户行为的概率 x 100,得分越高用户越接近真实用户,反之越接近异常用户,通常score < 1为异常用户
func Score(qCountMap map[string]int64) int64 {
return int64(truthPR(qCountMap, routersND))
}