Binary file not shown.
|
After Width: | Height: | Size: 16 KiB |
@@ -0,0 +1,178 @@
|
||||
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))
|
||||
}
|
||||
Reference in New Issue
Block a user