动态资源分类不准?算法优化提升准确率37%
|
去年十二月那阵子,我盯着监控屏,泡面在键盘边凉了又热——动态资源分类的准确率掉到六十二,业务方工单跟雪花似的砸过来。运维小王蹲在工位上改配置,键盘敲得噼里啪啦,我原以为又是规则库没更新,结果翻日志才发现,分类器把不少正常请求全打成“可疑流量”了——那些带特殊参数的API调用,明明该归到“业务访问”,全被塞进“攻击试探”里,连带着触发了一堆WAF拦截,用户访问失败率直接涨了十五个百分点。 那天晚上十一点,业务方张姐的电话打进来,声音都劈了:“你们这分类器是不是疯了?我后台订单接口被拦了半小时,客户骂娘了!”我一边翻日志一边赔不是,眼睛盯着屏幕都快花了——分类器用的是三年前的决策树模型,特征就二十来个,全是人工标的,可这两年业务迭代快,新接口、新参数、新协议全冒出来了,规则库根本跟不上。我原以为调调阈值就能糊弄过去,结果小王把模型日志甩我脸上:“哥,你看这特征权重,‘参数长度’和‘请求频率’的系数都快抵消了,分类器自己都懵了。” 手机震个不停,运维群里消息刷得比防火墙日志还快。小王说:“要不试试随机森林?特征多,能自动筛重要项。”我骂他:“你当这是Kaggle比赛呢?业务方要的是实时分类,随机森林跑起来得等三秒,用户早跑了。”可话刚说完,我又盯着屏幕发愣——分类器把一个正常POST请求标成“SQL注入”,就因为参数里有个单引号——这参数是业务方新加的“用户备注”字段,规则库里根本没这条。 第二天一早,我拽着小王去会议室,翻出三年前的模型文档,发现当初标数据的人早离职了,留下的注释全是“按经验标的”。小王翻着白眼:“这经验怕是过期了。”我咬着牙:“行,咱自己标数据——把最近三个月的流量全拉出来,人工标一遍,再扔进新模型里跑。”小王问:“标多少条?”我拍桌子:“先标十万条,不够再补!” 标数据那三天,我眼睛都快瞎了。十万条流量,每条看参数、看路径、看返回码,标成“正常”或“可疑”。小王在旁边敲代码,把新模型搭起来——这次用的是XGBoost,特征从二十个扩到八十个,除了参数长度、请求频率,还加了“协议类型”“响应时间”“用户历史行为”这些。我原以为特征多了会过拟合,结果跑第一轮测试,准确率直接跳到七十八——比原来的六十二涨了十六个百分点。
文章配图,仅供参考 业务方张姐又打电话来,这次声音软了:“你们那分类器…是不是修好了?今天订单接口没被拦过。”我得意:“那必须的,我们换了新模型,特征多了,准确率高。”张姐问:“高多少?”我卡壳——其实我还没算具体涨了多少,光顾着看测试集了。挂了电话,我拽着小王算数据:新模型在测试集上准确率七十八,旧模型六十二,涨了十六个百分点;可业务方说实际拦截率降了,说明旧模型误报多,新模型误报少——那真实准确率涨了多少?小王翻出生产日志,把最近一周的流量筛出来,人工标了一遍,再跟新旧模型的分类结果比——新模型准确率八十九,旧模型五十二,涨了三十七个百分点。我盯着数字愣了半天:“这数…靠谱吗?”小王拍胸脯:“我算了三遍,绝对靠谱。”我骂他:“早干嘛去了?三年前就该换模型!”小王撇嘴:“三年前你说决策树够用了,规则库更新就行。”我哑巴了——确实,我当初嫌随机森林慢,嫌XGBoost难调,结果拖到现在,被业务方骂了三个月。 窗外天亮了,我泡了第三包方便面。小王还在改模型参数,说要把准确率提到九十以上。我翻着旧模型文档,突然想起三年前标数据的那个人——他要是知道现在模型涨了三十七个百分点,会不会从坟里跳出来骂我“早该听我的”? 手机又震,运维群弹出消息:“业务方说新模型好用,要求上线。”我回:“等下,我再测一轮。”其实测试集早跑过了,准确率稳在八十九,可我还是不放心——万一生产环境有特殊流量呢?小王说:“哥,优胜劣汰,旧模型该退了。”我盯着屏幕,突然觉得他说得对——这行业就这样,规则库再全,也赶不上业务迭代;人工标再准,也抵不过模型自动筛。旧模型像个老古董,占着位置不干事;新模型像个小年轻,冲劲足,准头高。优胜劣汰,自然规律,谁也挡不住。 下一步?我打算把新模型的特征再扩扩,加个“用户设备类型”——听说移动端和PC端的攻击模式不一样,说不定能再涨几个百分点。至于旧模型?留着当备份吧,万一新模型翻车了,还能切回去——虽然我觉得,它翻车的概率,比旧模型准的概率,低多了。 (编辑:站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |




