第82章 復现包

    江临把那张写著【下一执行目標】的audit_log关掉,新建了一个空白的python文件。
    minimal_leak_demo.py
    距离对方要求的24小时窗口期,还剩二十三个小时四十一分。
    时间够用,但他没有任何懈怠的意思。
    构造一个最小復现实验,听起来简单,做起来却是一桩挺讲究分寸的活。
    第一,不能用平台提供的那3.4gb原始数据集的任何一个字节。
    否则对方可以反咬一口,说他是利用了数据集本身的某种特殊结构在断章取义。
    第二,不能太复杂。
    如果脚本写得花里胡哨,依赖了一堆奇形怪状的库,对方的工程师在覆核时光是配环境就要折腾半天,覆核流程一拖,事情就容易被冷处理。
    第三,必须锁死隨机种子。
    任何一个浮点数的微小波动,都可能被对方技术组归因於环境差异,进而拖慢覆核流程。
    江临盯著空白的代码窗口,思考了两分钟,然后开始动手,用numpy生成了一段由两个不同分布拼接而成的隨机时间序列。
    前八十个数据点,服从均值为零、標准差为一的正態分布,用来模擬训练窗口里平稳的市场行情。
    后二十个数据点,被他人为地注入了几个三倍標准差以上的极端值,用来模擬测试窗口里突然出现的异常事件。
    整个数据构造过程,不超过十行代码。
    隨机种子被锁定为42。
    为了避免隨机数生成器版本差异,他乾脆刪除了隨机生成过程,直接把一组最小合成序列硬编码进脚本。
    数字没有任何金融含义,只用於证明一个数学事实。
    测试窗参与標准化,会系统性压低测试窗內极端值的异常分数。
    数据准备好后,他在下方写了两个对照函数。
    第一个函数叫leaked_scaler,完全照搬baseline第六十七行的逻辑。
    把训练窗和测试窗合併,计算全局均值和全局標准差,然后做標准化。
    第二个函数叫causal_scaler,严格遵守时间因果律。
    只用训练窗的均值和標准差,去標准化测试窗。
    然后,他让两个函数分別对同一份合成数据进行处理,把標准化之后的异常分数列印出来。
    最后再加一行matplotlib画图代码,把两组结果叠在同一张图上。
    代码总长不到四十行。
    江临点击运行。
    不到一秒钟,屏幕上跳出了那张对照图。
    跟之前用真实数据跑出来的结果几乎一模一样。
    本书首发 追书就去 101 看书网,101??????.??????超靠谱 ,提供给你无错章节,无乱序章节的阅读体验
    leaked_scaler处理后的异常分数曲线,比causal_scaler矮了將近一截。
    那些本该刺破天际的尖峰,被未来信息悄悄地按了下去。
    乾净,纯粹,无可辩驳。
    江临把这张对照图截下来,存进文件夹。
    接著,他做了一件更狠的事情。
    给这个最小復现实验,写了一份像一份实验室设备校准记录的readme说明文档。
    文档第一节,是脚本的目的陈述。
    “本脚本旨在使用纯合成数据,復现真实数据集中观测到的预处理阶段未来信息泄漏现象。本脚本完全不依赖主办方提供的任何原始数据,所使用的所有隨机数均由锁定种子42生成,理论上可在任意支持numpy1.24以上版本的python环境中得到完全一致的输出。“
    文档第二节,是逐行代码注释。
    文档第三节,是预期输出的精確数值。
    江临把两组异常分数序列、每一个时间点的具体数值,都以表格形式列印在了readme里。
    任何人只要运行一次脚本,就能用diff命令逐字节比对自己的输出和他的输出是否一致。
    文档第四节,是数学推导。
    他用三页纸的篇幅,从最基础的標准化公式出发,一步一步推导了当测试集样本参与计算时,为什么会导致测试窗內的极端值在標准化后被系统性低估。
    每一个推导步骤都有编號,每一个公式都有引用来源。
    文档第五节,是工程建议。
    他冷静地列出了三种正確的预处理方案,並標註了各自的適用场景和计算开销。
    最后一节,是免责声明。
    “本实验的所有代码、数据和推导过程,均不涉及主办方提供的任何脱敏数据集的內部信息。本实验旨在通过最小化的方式独立验证一个数学事实,与主办方平台的具体实现细节无关。“
    这份readme一旦发出去,对方就彻底失去了所有可以模糊处理的空间。
    他用的是合成数据,对方没办法说他在恶意攻击平台。
    他锁了种子还附了精確数值,对方没办法说他不可復现。
    他给了三页的数学推导,对方没办法说他没有理论依据。
    他给出的是建议,不是指责,对方没办法说他在指手画脚。
    这就像在物理实验里搭出一个最小闭环的对照装置。
    输入固定,处理流程固定,输出差异固定。
    你可以不喜欢结论,但不能说它没有发生。
    江临扫了一眼右下角的时间,把整个文件夹打包成一个命名为reproduce_leakage_v1.0.zip的文件。
    然后切回瀏览器,打开那封站內信,点击补充材料上传按钮。
    页面提示:补充材料已提交,等待评审组覆核。
    江临关掉瀏览器,从椅子上站起来,走到窗边把窗帘拉开了一道缝。
    外面的阳光刺眼得让他眯起了眼睛。
    他这才意识到,自己已经连续在屋子里待了將近五天。
    转身去洗了个澡。
    热水冲在后颈上的那一刻,他脑子里那根紧绷了四天的弦,终於稍微鬆开了一点。
    用毛巾擦头髮的时候,他听到客厅里母亲在跟父亲低声说著什么。
    “都关在屋里五天了,连饭都是我端进去的。”
    “年轻人有事情忙是好事,別去打扰他。”
    “我就是担心。”
    “孩子能吃能喝的,状態好得很,你少瞎操心。”
    江临擦头髮的动作停了一下。
    他想了想,把毛巾搭在脖子上,推门走了出去。
    “妈,下午我想出去走走。”
    母亲从沙发上回头看他,脸上瞬间堆起笑容:“哎,去吧去吧,妈给你转点零花钱。”
    ……
    与此同时,上海,浦东某写字楼的二十三层。
    平台技术组的內部会议室里坐著六个人,没有人大声说话。
    单越是这种声音越低的时候,事情反而越重。
    长条会议桌的主位坐著的是一个四十多岁,戴著金丝眼镜的男人,是这次挑战赛的技术负责人,姓沈。
    他的笔记本电脑屏幕上,正显示著一份pdf的第十八页。
    页眉的位置印著两行小字。
    “《分钟级行情数据异常检测与回测前置审计报告》”
    “提交者:1453號。”
    沈工的右手食指无意识地敲著桌面,节奏越来越快。
    “这个1453號,背景查到了吗?”
    坐在他左手边的一个戴著耳机的年轻工程师立刻摇头:“註册信息只有一个手机號和一个邮箱,我们只能看到註册时主动留的手机號归属地和邮箱域名,更深的身份核查不能做,用户协议卡得很死。”
    “你们说,对方会是什么身份,某个高校的研究生?”沈工皱了皱眉。
    “不像。”另一个年纪稍长的女工程师摇头,“研究生写报告习惯用latex,遣词造句也有学术八股的味道。但这份报告的写法非常……”
    她犹豫了一下,找了个合適的形容词。
    “非常工程化。”
    “工程化?”
    “就是那种在一线干过活的人才写得出来的语气。你看他第二页画的那张污染链路拓扑图,他根本不是从金融的角度在看这份数据,而是从测量系统的角度在看的。”
    “他可能根本不关心市场,只关心从交易所到平台之间的每一层数据传输环节,哪一层最有可能掉包、漂移、错位。”
    女工程师翻到报告的第八页,把屏幕转向沈工。
    “真正麻烦的不是他指出了横向缺失。横向缺失只要画热力图,细心一点的人都能看见。麻烦的是,他把这些缺失带、价格尺度跳变和source_flag的分组变化放在了一张图里。”
    沈工低头看屏幕。
    报告第八页上有一张三层对齐图。
    最上面是按 minute_id展开的缺失热力图,中间是若干个脱敏標的在相邻date_id边界处的价格尺度变化。
    最下面是一条被离散化后的source_flag分组序列。
    三条图之间,被江临用细灰线拉出了几组对应关係。
    在图下方,他只写了一句很冷的判断。
    【source_flag的真实业务含义未知,本文不对其作確定解释。但该栏位分组变化与若干横向缺失带、尺度突变边界存在统计相关,建议主办方按source_flag分层覆核底层数据源、清洗批次或供应商接口切换记录。】
    会议室里安静了几秒。
    年轻工程师低声说:“他没有说source_flag是供应商编號。”
    女工程师点头:“对,他没有越界,只是证明了这个栏位不是无害栏位,和异常分布有关係。”
    沈工的脸色沉了下去。
    因为他们自己知道,source_flag背后確实不是普通质量標籤。
    它对应的是两家底层行情供应商和一次內部清洗批次切换后的混合標记。
    这个栏位本来不该暴露得这么完整。
    更糟的是,1453號並不是靠栏位名猜中的。
    他是从数据断层、尺度跳变和分组同步变化里,把这条链路反推了出来。
    “也就是说,他不知道我们的底层供应商是谁,但他已经知道这里发生过数据源切换。”沈工沉吟道。
    女工程师说:“对,而且他很聪明,报告里没有把话说死,只建议我们分层覆核。”
    这比直接指责更难处理。
    对方没有情绪,没有夸张结论,甚至没有一句越界的话。
    只是把证据摆在那里,然后把下一步该查什么,清清楚楚地写给了他们。
    沈工思考了將近一分钟,然后抬头去看桌对面那个一直没说话的法务。
    “老周,这次公开榜单前十里,至少有几份高分提交说明明显沿用了 baseline的全局標准化流程。他这份e类章节,要是真发到外网上?”
    那个被叫做老周的中年男人慢条斯理地推了推眼镜。
    “如果他没有恶意公开的意图,那就是一份非常严谨的內部审计建议,我们应该感谢他。但如果他选择把这份报告掛到知乎、雪球、或者任何一个量化论坛,那就是一次严重的行业级事故。”
    “问题不在於baseline本身。”女工程师说,“问题是我们前几期给客户演示的数据清洗模板,也是从这套notebook改出去的。参赛者可以不用,但客户会看。只要他把这段对照实验发出去,外界不会区分示例代码和平台数据能力。”
    老周说到这里看了一眼沈工,解释说:“所以,我们这一期挑战赛的所有公开榜单成绩,从法律和工程角度都会失去公信力。前几期挑战赛因为也用了类似的baseline,会被一併质疑。已经签了商业合作的几个机构客户,会立刻发函要求我们做技术核查。”
    “最坏的情况是,我们整个平台技术组,未来三年內的口碑和业务都会受到不可逆的损害。”
    会议室里再次陷入死气沉沉的氛围中。
    就在这时,戴耳机的年轻工程师面前的电脑屏幕上突然弹出一个新的邮件提示。
    他点开看了一眼,瞳孔猛地缩了一下。
    “沈工,1453號刚刚提交了补充材料,叫reproduce_leakage_v1.0.zip。“
    沈工的呼吸停顿了一瞬,立即说道:“打开,投到大屏上。“
    年轻工程师將那个不到一百kb的压缩包扫了一遍,然后下载解压,把readme的內容投到了会议室的大屏幕上。
    六个人同时屏住了呼吸,目光在屏幕上由上至下扫过。
    整整两分钟,没有人说话。
    最后是那位女工程师轻轻吐出一口气:“他连我们想找藉口的余地都没留。”
    沈工盯著屏幕上那张精確到小数点后十六位的预期输出表格,缓缓地往后靠在了椅背上。
    良久,他才开口:“通知评审组,最终评分先暂停自动出榜,等技术覆核结果。还有,联繫1453號,我要跟他谈谈。”
    ……
    江临从外面回来的时候,已经是傍晚六点多。
    晚饭桌上,母亲难得没念叨他这几天闷在屋里的事,反倒一个劲地往他碗里夹菜。
    吃完饭,他回到房间,习惯性地晃了晃滑鼠。
    屏幕亮起。
    赛事网页右上角的通知小铃鐺,又显示了一条新的站內信。
    “关於邀请您参与平台数据审计专项的初步沟通函。”
    发件人依然带著蓝色v字认证:平台技术组管理员-dataops_03。
本站所有小说均来源于会员自主上传,如侵犯你的权益请联系我们,我们会尽快删除。

腐文书,免费小说,免费全本小说,好看的小说,热门小说,小说阅读网
版权所有 https://www.fuwenshu1.com All Rights Reserved, 联系邮箱:ad#taorouwen.com