选择国家与语言当前国家: 中国
德勤 Virtual Internship / 任务 04
实习猿原创实训 · 任务 04服务时效差异审查
控制服务结构和样本量差异,给出站点复核优先级及有边界的解释。
先查看已完成的成果,再使用材料完成自己的交付。
先阅读完整成果材料
learner/checkpoints/order-review.csv 阅读完整文件
下载文件| order_id | hub | service | route | created_at | due_at | cohort | late_minutes | overdue_minutes |
|---|---|---|---|---|---|---|---|---|
| O0001 | 海港 | standard | R11 | 2026-09-01T06:00:00Z | 2026-09-02T06:00:00Z | cancelled | 0 | 0 |
| O0002 | 海港 | standard | R12 | 2026-09-02T07:00:00Z | 2026-09-03T07:00:00Z | delivered_late | 50 | 0 |
| O0003 | 海港 | standard | R11 | 2026-09-03T08:00:00Z | 2026-09-04T08:00:00Z | on_time | 0 | 0 |
| O0004 | 海港 | standard | R12 | 2026-09-04T09:00:00Z | 2026-09-05T09:00:00Z | on_time | 0 | 0 |
| O0005 | 海港 | standard | R11 | 2026-09-05T10:00:00Z | 2026-09-06T10:00:00Z | delivered_late | 50 | 0 |
| O0006 | 海港 | standard | R12 | 2026-09-06T11:00:00Z | 2026-09-07T11:00:00Z | on_time | 0 | 0 |
| O0007 | 海港 | standard | R11 | 2026-09-07T12:00:00Z | 2026-09-08T12:00:00Z | on_time | 0 | 0 |
| O0008 | 海港 | standard | R12 | 2026-09-08T13:00:00Z | 2026-09-09T13:00:00Z | delivered_late | 50 | 0 |
| O0009 | 海港 | standard | R11 | 2026-09-09T06:00:00Z | 2026-09-10T06:00:00Z | on_time | 0 | 0 |
| O0010 | 海港 | standard | R12 | 2026-09-10T07:00:00Z | 2026-09-11T07:00:00Z | on_time | 0 | 0 |
| O0011 | 海港 | standard | R11 | 2026-09-11T08:00:00Z | 2026-09-12T08:00:00Z | delivered_late | 50 | 0 |
| O0012 | 海港 | standard | R12 | 2026-09-12T09:00:00Z | 2026-09-13T09:00:00Z | on_time | 0 | 0 |
| O0013 | 海港 | standard | R11 | 2026-09-13T10:00:00Z | 2026-09-14T10:00:00Z | on_time | 0 | 0 |
| O0014 | 海港 | standard | R12 | 2026-09-01T11:00:00Z | 2026-09-02T11:00:00Z | delivered_late | 50 | 0 |
| O0015 | 海港 | standard | R11 | 2026-09-02T12:00:00Z | 2026-09-03T12:00:00Z | on_time | 0 | 0 |
| O0016 | 海港 | standard | R12 | 2026-09-03T13:00:00Z | 2026-09-04T13:00:00Z | on_time | 0 | 0 |
| O0017 | 海港 | standard | R11 | 2026-09-04T06:00:00Z | 2026-09-05T06:00:00Z | delivered_late | 50 | 0 |
| O0018 | 海港 | standard | R12 | 2026-09-05T07:00:00Z | 2026-09-06T07:00:00Z | overdue_open | 0 | 12540 |
| O0019 | 海港 | standard | R11 | 2026-09-06T08:00:00Z | 2026-09-07T08:00:00Z | on_time | 0 | 0 |
| O0020 | 海港 | standard | R12 | 2026-09-07T09:00:00Z | 2026-09-08T09:00:00Z | delivered_late | 50 | 0 |
| O0021 | 海港 | standard | R11 | 2026-09-08T10:00:00Z | 2026-09-09T10:00:00Z | on_time | 0 | 0 |
| O0022 | 海港 | standard | R12 | 2026-09-09T11:00:00Z | 2026-09-10T11:00:00Z | on_time | 0 | 0 |
| O0023 | 海港 | standard | R11 | 2026-09-10T12:00:00Z | 2026-09-11T12:00:00Z | delivered_late | 50 | 0 |
| O0024 | 海港 | standard | R12 | 2026-09-11T13:00:00Z | 2026-09-12T13:00:00Z | on_time | 0 | 0 |
| O0025 | 海港 | standard | R11 | 2026-09-12T06:00:00Z | 2026-09-13T06:00:00Z | on_time | 0 | 0 |
| O0026 | 海港 | standard | R12 | 2026-09-13T07:00:00Z | 2026-09-14T07:00:00Z | delivered_late | 50 | 0 |
| O0027 | 海港 | standard | R11 | 2026-09-01T08:00:00Z | 2026-09-02T08:00:00Z | on_time | 0 | 0 |
| O0028 | 海港 | standard | R12 | 2026-09-02T09:00:00Z | 2026-09-03T09:00:00Z | on_time | 0 | 0 |
| O0029 | 海港 | standard | R11 | 2026-09-03T10:00:00Z | 2026-09-04T10:00:00Z | delivered_late | 50 | 0 |
| O0030 | 海港 | standard | R12 | 2026-09-04T11:00:00Z | 2026-09-05T11:00:00Z | cancelled | 0 | 0 |
| O0031 | 海港 | standard | R11 | 2026-09-05T12:00:00Z | 2026-09-06T12:00:00Z | on_time | 0 | 0 |
| O0032 | 海港 | standard | R12 | 2026-09-06T13:00:00Z | 2026-09-07T13:00:00Z | delivered_late | 50 | 0 |
| O0033 | 海港 | standard | R11 | 2026-09-07T06:00:00Z | 2026-09-08T06:00:00Z | on_time | 0 | 0 |
| O0034 | 海港 | standard | R12 | 2026-09-08T07:00:00Z | 2026-09-09T07:00:00Z | on_time | 0 | 0 |
| O0035 | 海港 | standard | R11 | 2026-09-09T08:00:00Z | 2026-09-10T08:00:00Z | overdue_open | 0 | 6720 |
| O0036 | 海港 | standard | R12 | 2026-09-10T09:00:00Z | 2026-09-11T09:00:00Z | on_time | 0 | 0 |
| O0037 | 海港 | standard | R11 | 2026-09-11T10:00:00Z | 2026-09-12T10:00:00Z | on_time | 0 | 0 |
| O0038 | 海港 | standard | R12 | 2026-09-12T11:00:00Z | 2026-09-13T11:00:00Z | delivered_late | 50 | 0 |
| O0039 | 海港 | standard | R11 | 2026-09-13T12:00:00Z | 2026-09-14T12:00:00Z | on_time | 0 | 0 |
| O0040 | 海港 | standard | R12 | 2026-09-14T21:00:00Z | 2026-09-15T21:00:00Z | not_mature | 0 | 0 |
| O0041 | 海港 | express | R11 | 2026-09-01T06:00:00Z | 2026-09-01T14:00:00Z | cancelled | 0 | 0 |
| O0042 | 海港 | express | R12 | 2026-09-02T07:00:00Z | 2026-09-02T15:00:00Z | delivered_late | 50 | 0 |
| O0043 | 海港 | express | R11 | 2026-09-03T08:00:00Z | 2026-09-03T16:00:00Z | delivered_late | 50 | 0 |
| O0044 | 海港 | express | R12 | 2026-09-04T09:00:00Z | 2026-09-04T17:00:00Z | delivered_late | 50 | 0 |
| O0045 | 海港 | express | R11 | 2026-09-05T10:00:00Z | 2026-09-05T18:00:00Z | delivered_late | 50 | 0 |
| O0046 | 海港 | express | R12 | 2026-09-06T11:00:00Z | 2026-09-06T19:00:00Z | delivered_late | 50 | 0 |
| O0047 | 海港 | express | R11 | 2026-09-07T12:00:00Z | 2026-09-07T20:00:00Z | delivered_late | 50 | 0 |
| O0048 | 海港 | express | R12 | 2026-09-08T13:00:00Z | 2026-09-08T21:00:00Z | delivered_late | 50 | 0 |
| O0049 | 海港 | express | R11 | 2026-09-09T06:00:00Z | 2026-09-09T14:00:00Z | delivered_late | 50 | 0 |
| O0050 | 海港 | express | R12 | 2026-09-10T07:00:00Z | 2026-09-10T15:00:00Z | delivered_late | 50 | 0 |
| O0051 | 海港 | express | R11 | 2026-09-11T08:00:00Z | 2026-09-11T16:00:00Z | delivered_late | 50 | 0 |
| O0052 | 海港 | express | R12 | 2026-09-12T09:00:00Z | 2026-09-12T17:00:00Z | delivered_late | 50 | 0 |
| O0053 | 海港 | express | R11 | 2026-09-13T10:00:00Z | 2026-09-13T18:00:00Z | delivered_late | 50 | 0 |
| O0054 | 海港 | express | R12 | 2026-09-01T11:00:00Z | 2026-09-01T19:00:00Z | delivered_late | 50 | 0 |
| O0055 | 海港 | express | R11 | 2026-09-02T12:00:00Z | 2026-09-02T20:00:00Z | delivered_late | 50 | 0 |
| O0056 | 海港 | express | R12 | 2026-09-03T13:00:00Z | 2026-09-03T21:00:00Z | delivered_late | 50 | 0 |
| O0057 | 海港 | express | R11 | 2026-09-04T06:00:00Z | 2026-09-04T14:00:00Z | delivered_late | 50 | 0 |
| O0058 | 海港 | express | R12 | 2026-09-05T07:00:00Z | 2026-09-05T15:00:00Z | overdue_open | 0 | 13500 |
| O0059 | 海港 | express | R11 | 2026-09-06T08:00:00Z | 2026-09-06T16:00:00Z | delivered_late | 50 | 0 |
| O0060 | 海港 | express | R12 | 2026-09-14T21:00:00Z | 2026-09-15T05:00:00Z | not_mature | 0 | 0 |
| O0061 | 东城 | standard | R21 | 2026-09-01T06:00:00Z | 2026-09-02T06:00:00Z | cancelled | 0 | 0 |
| O0062 | 东城 | standard | R22 | 2026-09-02T07:00:00Z | 2026-09-03T07:00:00Z | delivered_late | 70 | 0 |
| O0063 | 东城 | standard | R21 | 2026-09-03T08:00:00Z | 2026-09-04T08:00:00Z | on_time | 0 | 0 |
| O0064 | 东城 | standard | R22 | 2026-09-04T09:00:00Z | 2026-09-05T09:00:00Z | on_time | 0 | 0 |
| O0065 | 东城 | standard | R21 | 2026-09-05T10:00:00Z | 2026-09-06T10:00:00Z | on_time | 0 | 0 |
| O0066 | 东城 | standard | R22 | 2026-09-06T11:00:00Z | 2026-09-07T11:00:00Z | delivered_late | 70 | 0 |
| O0067 | 东城 | standard | R21 | 2026-09-07T12:00:00Z | 2026-09-08T12:00:00Z | on_time | 0 | 0 |
| O0068 | 东城 | standard | R22 | 2026-09-08T13:00:00Z | 2026-09-09T13:00:00Z | on_time | 0 | 0 |
| O0069 | 东城 | standard | R21 | 2026-09-09T06:00:00Z | 2026-09-10T06:00:00Z | on_time | 0 | 0 |
| O0070 | 东城 | standard | R22 | 2026-09-10T07:00:00Z | 2026-09-11T07:00:00Z | delivered_late | 70 | 0 |
| O0071 | 东城 | standard | R21 | 2026-09-11T08:00:00Z | 2026-09-12T08:00:00Z | on_time | 0 | 0 |
| O0072 | 东城 | standard | R22 | 2026-09-12T09:00:00Z | 2026-09-13T09:00:00Z | on_time | 0 | 0 |
| O0073 | 东城 | standard | R21 | 2026-09-13T10:00:00Z | 2026-09-14T10:00:00Z | on_time | 0 | 0 |
| O0074 | 东城 | standard | R22 | 2026-09-01T11:00:00Z | 2026-09-02T11:00:00Z | delivered_late | 70 | 0 |
| O0075 | 东城 | standard | R21 | 2026-09-02T12:00:00Z | 2026-09-03T12:00:00Z | on_time | 0 | 0 |
| O0076 | 东城 | standard | R22 | 2026-09-03T13:00:00Z | 2026-09-04T13:00:00Z | on_time | 0 | 0 |
| O0077 | 东城 | standard | R21 | 2026-09-04T06:00:00Z | 2026-09-05T06:00:00Z | on_time | 0 | 0 |
| O0078 | 东城 | standard | R22 | 2026-09-05T07:00:00Z | 2026-09-06T07:00:00Z | overdue_open | 0 | 12540 |
| O0079 | 东城 | standard | R21 | 2026-09-06T08:00:00Z | 2026-09-07T08:00:00Z | on_time | 0 | 0 |
| O0080 | 东城 | standard | R22 | 2026-09-14T21:00:00Z | 2026-09-15T21:00:00Z | not_mature | 0 | 0 |
| O0081 | 东城 | express | R21 | 2026-09-01T06:00:00Z | 2026-09-01T14:00:00Z | cancelled | 0 | 0 |
| O0082 | 东城 | express | R22 | 2026-09-02T07:00:00Z | 2026-09-02T15:00:00Z | delivered_late | 70 | 0 |
| O0083 | 东城 | express | R21 | 2026-09-03T08:00:00Z | 2026-09-03T16:00:00Z | on_time | 0 | 0 |
| O0084 | 东城 | express | R22 | 2026-09-04T09:00:00Z | 2026-09-04T17:00:00Z | delivered_late | 70 | 0 |
| O0085 | 东城 | express | R21 | 2026-09-05T10:00:00Z | 2026-09-05T18:00:00Z | delivered_late | 70 | 0 |
| O0086 | 东城 | express | R22 | 2026-09-06T11:00:00Z | 2026-09-06T19:00:00Z | on_time | 0 | 0 |
| O0087 | 东城 | express | R21 | 2026-09-07T12:00:00Z | 2026-09-07T20:00:00Z | delivered_late | 70 | 0 |
| O0088 | 东城 | express | R22 | 2026-09-08T13:00:00Z | 2026-09-08T21:00:00Z | delivered_late | 70 | 0 |
| O0089 | 东城 | express | R21 | 2026-09-09T06:00:00Z | 2026-09-09T14:00:00Z | on_time | 0 | 0 |
| O0090 | 东城 | express | R22 | 2026-09-10T07:00:00Z | 2026-09-10T15:00:00Z | delivered_late | 70 | 0 |
| O0091 | 东城 | express | R21 | 2026-09-11T08:00:00Z | 2026-09-11T16:00:00Z | delivered_late | 70 | 0 |
| O0092 | 东城 | express | R22 | 2026-09-12T09:00:00Z | 2026-09-12T17:00:00Z | on_time | 0 | 0 |
| O0093 | 东城 | express | R21 | 2026-09-13T10:00:00Z | 2026-09-13T18:00:00Z | delivered_late | 70 | 0 |
| O0094 | 东城 | express | R22 | 2026-09-01T11:00:00Z | 2026-09-01T19:00:00Z | delivered_late | 70 | 0 |
| O0095 | 东城 | express | R21 | 2026-09-02T12:00:00Z | 2026-09-02T20:00:00Z | on_time | 0 | 0 |
| O0096 | 东城 | express | R22 | 2026-09-03T13:00:00Z | 2026-09-03T21:00:00Z | delivered_late | 70 | 0 |
| O0097 | 东城 | express | R21 | 2026-09-04T06:00:00Z | 2026-09-04T14:00:00Z | delivered_late | 70 | 0 |
| O0098 | 东城 | express | R22 | 2026-09-05T07:00:00Z | 2026-09-05T15:00:00Z | overdue_open | 0 | 13500 |
| O0099 | 东城 | express | R21 | 2026-09-06T08:00:00Z | 2026-09-06T16:00:00Z | delivered_late | 70 | 0 |
| O0100 | 东城 | express | R22 | 2026-09-07T09:00:00Z | 2026-09-07T17:00:00Z | delivered_late | 70 | 0 |
| O0101 | 东城 | express | R21 | 2026-09-08T10:00:00Z | 2026-09-08T18:00:00Z | on_time | 0 | 0 |
| O0102 | 东城 | express | R22 | 2026-09-09T11:00:00Z | 2026-09-09T19:00:00Z | delivered_late | 70 | 0 |
| O0103 | 东城 | express | R21 | 2026-09-10T12:00:00Z | 2026-09-10T20:00:00Z | delivered_late | 70 | 0 |
| O0104 | 东城 | express | R22 | 2026-09-11T13:00:00Z | 2026-09-11T21:00:00Z | on_time | 0 | 0 |
| O0105 | 东城 | express | R21 | 2026-09-12T06:00:00Z | 2026-09-12T14:00:00Z | delivered_late | 70 | 0 |
| O0106 | 东城 | express | R22 | 2026-09-13T07:00:00Z | 2026-09-13T15:00:00Z | delivered_late | 70 | 0 |
| O0107 | 东城 | express | R21 | 2026-09-01T08:00:00Z | 2026-09-01T16:00:00Z | on_time | 0 | 0 |
| O0108 | 东城 | express | R22 | 2026-09-02T09:00:00Z | 2026-09-02T17:00:00Z | delivered_late | 70 | 0 |
| O0109 | 东城 | express | R21 | 2026-09-03T10:00:00Z | 2026-09-03T18:00:00Z | delivered_late | 70 | 0 |
| O0110 | 东城 | express | R22 | 2026-09-04T11:00:00Z | 2026-09-04T19:00:00Z | cancelled | 0 | 0 |
| O0111 | 东城 | express | R21 | 2026-09-05T12:00:00Z | 2026-09-05T20:00:00Z | delivered_late | 70 | 0 |
| O0112 | 东城 | express | R22 | 2026-09-06T13:00:00Z | 2026-09-06T21:00:00Z | delivered_late | 70 | 0 |
| O0113 | 东城 | express | R21 | 2026-09-07T06:00:00Z | 2026-09-07T14:00:00Z | on_time | 0 | 0 |
| O0114 | 东城 | express | R22 | 2026-09-08T07:00:00Z | 2026-09-08T15:00:00Z | delivered_late | 70 | 0 |
| O0115 | 东城 | express | R21 | 2026-09-09T08:00:00Z | 2026-09-09T16:00:00Z | overdue_open | 0 | 7680 |
| O0116 | 东城 | express | R22 | 2026-09-10T09:00:00Z | 2026-09-10T17:00:00Z | on_time | 0 | 0 |
| O0117 | 东城 | express | R21 | 2026-09-11T10:00:00Z | 2026-09-11T18:00:00Z | delivered_late | 70 | 0 |
| O0118 | 东城 | express | R22 | 2026-09-12T11:00:00Z | 2026-09-12T19:00:00Z | delivered_late | 70 | 0 |
| O0119 | 东城 | express | R21 | 2026-09-13T12:00:00Z | 2026-09-13T20:00:00Z | on_time | 0 | 0 |
| O0120 | 东城 | express | R22 | 2026-09-14T21:00:00Z | 2026-09-15T05:00:00Z | not_mature | 0 | 0 |
| O0121 | 西岭 | standard | R31 | 2026-09-01T06:00:00Z | 2026-09-02T06:00:00Z | cancelled | 0 | 0 |
| O0122 | 西岭 | standard | R32 | 2026-09-02T07:00:00Z | 2026-09-03T07:00:00Z | delivered_late | 90 | 0 |
| O0123 | 西岭 | standard | R31 | 2026-09-03T08:00:00Z | 2026-09-04T08:00:00Z | on_time | 0 | 0 |
| O0124 | 西岭 | standard | R32 | 2026-09-04T09:00:00Z | 2026-09-05T09:00:00Z | on_time | 0 | 0 |
| O0125 | 西岭 | standard | R31 | 2026-09-05T10:00:00Z | 2026-09-06T10:00:00Z | on_time | 0 | 0 |
| O0126 | 西岭 | standard | R32 | 2026-09-06T11:00:00Z | 2026-09-07T11:00:00Z | on_time | 0 | 0 |
| O0127 | 西岭 | standard | R31 | 2026-09-07T12:00:00Z | 2026-09-08T12:00:00Z | delivered_late | 90 | 0 |
| O0128 | 西岭 | standard | R32 | 2026-09-08T13:00:00Z | 2026-09-09T13:00:00Z | on_time | 0 | 0 |
| O0129 | 西岭 | standard | R31 | 2026-09-09T06:00:00Z | 2026-09-10T06:00:00Z | on_time | 0 | 0 |
| O0130 | 西岭 | standard | R32 | 2026-09-10T07:00:00Z | 2026-09-11T07:00:00Z | on_time | 0 | 0 |
| O0131 | 西岭 | standard | R31 | 2026-09-11T08:00:00Z | 2026-09-12T08:00:00Z | on_time | 0 | 0 |
| O0132 | 西岭 | standard | R32 | 2026-09-12T09:00:00Z | 2026-09-13T09:00:00Z | delivered_late | 90 | 0 |
| O0133 | 西岭 | standard | R31 | 2026-09-13T10:00:00Z | 2026-09-14T10:00:00Z | on_time | 0 | 0 |
| O0134 | 西岭 | standard | R32 | 2026-09-01T11:00:00Z | 2026-09-02T11:00:00Z | on_time | 0 | 0 |
| O0135 | 西岭 | standard | R31 | 2026-09-02T12:00:00Z | 2026-09-03T12:00:00Z | on_time | 0 | 0 |
| O0136 | 西岭 | standard | R32 | 2026-09-03T13:00:00Z | 2026-09-04T13:00:00Z | on_time | 0 | 0 |
| O0137 | 西岭 | standard | R31 | 2026-09-04T06:00:00Z | 2026-09-05T06:00:00Z | delivered_late | 90 | 0 |
| O0138 | 西岭 | standard | R32 | 2026-09-05T07:00:00Z | 2026-09-06T07:00:00Z | overdue_open | 0 | 12540 |
| O0139 | 西岭 | standard | R31 | 2026-09-06T08:00:00Z | 2026-09-07T08:00:00Z | on_time | 0 | 0 |
| O0140 | 西岭 | standard | R32 | 2026-09-07T09:00:00Z | 2026-09-08T09:00:00Z | on_time | 0 | 0 |
| O0141 | 西岭 | standard | R31 | 2026-09-08T10:00:00Z | 2026-09-09T10:00:00Z | on_time | 0 | 0 |
| O0142 | 西岭 | standard | R32 | 2026-09-09T11:00:00Z | 2026-09-10T11:00:00Z | delivered_late | 90 | 0 |
| O0143 | 西岭 | standard | R31 | 2026-09-10T12:00:00Z | 2026-09-11T12:00:00Z | on_time | 0 | 0 |
| O0144 | 西岭 | standard | R32 | 2026-09-11T13:00:00Z | 2026-09-12T13:00:00Z | on_time | 0 | 0 |
| O0145 | 西岭 | standard | R31 | 2026-09-12T06:00:00Z | 2026-09-13T06:00:00Z | on_time | 0 | 0 |
| O0146 | 西岭 | standard | R32 | 2026-09-13T07:00:00Z | 2026-09-14T07:00:00Z | on_time | 0 | 0 |
| O0147 | 西岭 | standard | R31 | 2026-09-01T08:00:00Z | 2026-09-02T08:00:00Z | delivered_late | 90 | 0 |
| O0148 | 西岭 | standard | R32 | 2026-09-02T09:00:00Z | 2026-09-03T09:00:00Z | on_time | 0 | 0 |
| O0149 | 西岭 | standard | R31 | 2026-09-03T10:00:00Z | 2026-09-04T10:00:00Z | on_time | 0 | 0 |
| O0150 | 西岭 | standard | R32 | 2026-09-04T11:00:00Z | 2026-09-05T11:00:00Z | cancelled | 0 | 0 |
| O0151 | 西岭 | standard | R31 | 2026-09-05T12:00:00Z | 2026-09-06T12:00:00Z | on_time | 0 | 0 |
| O0152 | 西岭 | standard | R32 | 2026-09-06T13:00:00Z | 2026-09-07T13:00:00Z | delivered_late | 90 | 0 |
| O0153 | 西岭 | standard | R31 | 2026-09-07T06:00:00Z | 2026-09-08T06:00:00Z | on_time | 0 | 0 |
| O0154 | 西岭 | standard | R32 | 2026-09-08T07:00:00Z | 2026-09-09T07:00:00Z | on_time | 0 | 0 |
| O0155 | 西岭 | standard | R31 | 2026-09-09T08:00:00Z | 2026-09-10T08:00:00Z | overdue_open | 0 | 6720 |
| O0156 | 西岭 | standard | R32 | 2026-09-14T21:00:00Z | 2026-09-15T21:00:00Z | not_mature | 0 | 0 |
| O0157 | 西岭 | express | R31 | 2026-09-01T06:00:00Z | 2026-09-01T14:00:00Z | cancelled | 0 | 0 |
| O0158 | 西岭 | express | R32 | 2026-09-02T07:00:00Z | 2026-09-02T15:00:00Z | delivered_late | 90 | 0 |
| O0159 | 西岭 | express | R31 | 2026-09-03T08:00:00Z | 2026-09-03T16:00:00Z | on_time | 0 | 0 |
| O0160 | 西岭 | express | R32 | 2026-09-04T09:00:00Z | 2026-09-04T17:00:00Z | on_time | 0 | 0 |
| O0161 | 西岭 | express | R31 | 2026-09-05T10:00:00Z | 2026-09-05T18:00:00Z | delivered_late | 90 | 0 |
| O0162 | 西岭 | express | R32 | 2026-09-06T11:00:00Z | 2026-09-06T19:00:00Z | delivered_late | 90 | 0 |
| O0163 | 西岭 | express | R31 | 2026-09-07T12:00:00Z | 2026-09-07T20:00:00Z | on_time | 0 | 0 |
| O0164 | 西岭 | express | R32 | 2026-09-08T13:00:00Z | 2026-09-08T21:00:00Z | on_time | 0 | 0 |
| O0165 | 西岭 | express | R31 | 2026-09-09T06:00:00Z | 2026-09-09T14:00:00Z | delivered_late | 90 | 0 |
| O0166 | 西岭 | express | R32 | 2026-09-10T07:00:00Z | 2026-09-10T15:00:00Z | delivered_late | 90 | 0 |
| O0167 | 西岭 | express | R31 | 2026-09-11T08:00:00Z | 2026-09-11T16:00:00Z | on_time | 0 | 0 |
| O0168 | 西岭 | express | R32 | 2026-09-12T09:00:00Z | 2026-09-12T17:00:00Z | on_time | 0 | 0 |
| O0169 | 西岭 | express | R31 | 2026-09-13T10:00:00Z | 2026-09-13T18:00:00Z | delivered_late | 90 | 0 |
| O0170 | 西岭 | express | R32 | 2026-09-01T11:00:00Z | 2026-09-01T19:00:00Z | delivered_late | 90 | 0 |
| O0171 | 西岭 | express | R31 | 2026-09-02T12:00:00Z | 2026-09-02T20:00:00Z | on_time | 0 | 0 |
| O0172 | 西岭 | express | R32 | 2026-09-03T13:00:00Z | 2026-09-03T21:00:00Z | on_time | 0 | 0 |
| O0173 | 西岭 | express | R31 | 2026-09-04T06:00:00Z | 2026-09-04T14:00:00Z | delivered_late | 90 | 0 |
| O0174 | 西岭 | express | R32 | 2026-09-05T07:00:00Z | 2026-09-05T15:00:00Z | overdue_open | 0 | 13500 |
| O0175 | 西岭 | express | R31 | 2026-09-06T08:00:00Z | 2026-09-06T16:00:00Z | on_time | 0 | 0 |
| O0176 | 西岭 | express | R32 | 2026-09-07T09:00:00Z | 2026-09-07T17:00:00Z | on_time | 0 | 0 |
| O0177 | 西岭 | express | R31 | 2026-09-08T10:00:00Z | 2026-09-08T18:00:00Z | delivered_late | 90 | 0 |
| O0178 | 西岭 | express | R32 | 2026-09-09T11:00:00Z | 2026-09-09T19:00:00Z | delivered_late | 90 | 0 |
| O0179 | 西岭 | express | R31 | 2026-09-10T12:00:00Z | 2026-09-10T20:00:00Z | on_time | 0 | 0 |
| O0180 | 西岭 | express | R32 | 2026-09-14T21:00:00Z | 2026-09-15T05:00:00Z | not_mature | 0 | 0 |
| O0181 | 南湾 | standard | R41 | 2026-09-01T06:00:00Z | 2026-09-02T06:00:00Z | cancelled | 0 | 0 |
| O0182 | 南湾 | standard | R42 | 2026-09-02T07:00:00Z | 2026-09-03T07:00:00Z | delivered_late | 110 | 0 |
| O0183 | 南湾 | standard | R41 | 2026-09-03T08:00:00Z | 2026-09-04T08:00:00Z | on_time | 0 | 0 |
| O0184 | 南湾 | standard | R42 | 2026-09-04T09:00:00Z | 2026-09-05T09:00:00Z | on_time | 0 | 0 |
| O0185 | 南湾 | standard | R41 | 2026-09-05T10:00:00Z | 2026-09-06T10:00:00Z | on_time | 0 | 0 |
| O0186 | 南湾 | standard | R42 | 2026-09-06T11:00:00Z | 2026-09-07T11:00:00Z | on_time | 0 | 0 |
| O0187 | 南湾 | standard | R41 | 2026-09-07T12:00:00Z | 2026-09-08T12:00:00Z | on_time | 0 | 0 |
| O0188 | 南湾 | standard | R42 | 2026-09-08T13:00:00Z | 2026-09-09T13:00:00Z | delivered_late | 110 | 0 |
| O0189 | 南湾 | standard | R41 | 2026-09-09T06:00:00Z | 2026-09-10T06:00:00Z | on_time | 0 | 0 |
| O0190 | 南湾 | standard | R42 | 2026-09-10T07:00:00Z | 2026-09-11T07:00:00Z | on_time | 0 | 0 |
| O0191 | 南湾 | standard | R41 | 2026-09-11T08:00:00Z | 2026-09-12T08:00:00Z | on_time | 0 | 0 |
| O0192 | 南湾 | standard | R42 | 2026-09-12T09:00:00Z | 2026-09-13T09:00:00Z | on_time | 0 | 0 |
| O0193 | 南湾 | standard | R41 | 2026-09-13T10:00:00Z | 2026-09-14T10:00:00Z | on_time | 0 | 0 |
| O0194 | 南湾 | standard | R42 | 2026-09-01T11:00:00Z | 2026-09-02T11:00:00Z | delivered_late | 110 | 0 |
| O0195 | 南湾 | standard | R41 | 2026-09-02T12:00:00Z | 2026-09-03T12:00:00Z | on_time | 0 | 0 |
| O0196 | 南湾 | standard | R42 | 2026-09-03T13:00:00Z | 2026-09-04T13:00:00Z | on_time | 0 | 0 |
| O0197 | 南湾 | standard | R41 | 2026-09-04T06:00:00Z | 2026-09-05T06:00:00Z | on_time | 0 | 0 |
| O0198 | 南湾 | standard | R42 | 2026-09-05T07:00:00Z | 2026-09-06T07:00:00Z | overdue_open | 0 | 12540 |
| O0199 | 南湾 | standard | R41 | 2026-09-06T08:00:00Z | 2026-09-07T08:00:00Z | on_time | 0 | 0 |
| O0200 | 南湾 | standard | R42 | 2026-09-07T09:00:00Z | 2026-09-08T09:00:00Z | delivered_late | 110 | 0 |
| O0201 | 南湾 | standard | R41 | 2026-09-08T10:00:00Z | 2026-09-09T10:00:00Z | on_time | 0 | 0 |
| O0202 | 南湾 | standard | R42 | 2026-09-09T11:00:00Z | 2026-09-10T11:00:00Z | on_time | 0 | 0 |
| O0203 | 南湾 | standard | R41 | 2026-09-10T12:00:00Z | 2026-09-11T12:00:00Z | on_time | 0 | 0 |
| O0204 | 南湾 | standard | R42 | 2026-09-11T13:00:00Z | 2026-09-12T13:00:00Z | on_time | 0 | 0 |
| O0205 | 南湾 | standard | R41 | 2026-09-12T06:00:00Z | 2026-09-13T06:00:00Z | on_time | 0 | 0 |
| O0206 | 南湾 | standard | R42 | 2026-09-13T07:00:00Z | 2026-09-14T07:00:00Z | delivered_late | 110 | 0 |
| O0207 | 南湾 | standard | R41 | 2026-09-01T08:00:00Z | 2026-09-02T08:00:00Z | on_time | 0 | 0 |
| O0208 | 南湾 | standard | R42 | 2026-09-02T09:00:00Z | 2026-09-03T09:00:00Z | on_time | 0 | 0 |
| O0209 | 南湾 | standard | R41 | 2026-09-03T10:00:00Z | 2026-09-04T10:00:00Z | on_time | 0 | 0 |
| O0210 | 南湾 | standard | R42 | 2026-09-14T21:00:00Z | 2026-09-15T21:00:00Z | cancelled | 0 | 0 |
| O0211 | 南湾 | express | R41 | 2026-09-01T06:00:00Z | 2026-09-01T14:00:00Z | cancelled | 0 | 0 |
| O0212 | 南湾 | express | R42 | 2026-09-02T07:00:00Z | 2026-09-02T15:00:00Z | delivered_late | 110 | 0 |
| O0213 | 南湾 | express | R41 | 2026-09-03T08:00:00Z | 2026-09-03T16:00:00Z | on_time | 0 | 0 |
| O0214 | 南湾 | express | R42 | 2026-09-04T09:00:00Z | 2026-09-04T17:00:00Z | on_time | 0 | 0 |
| O0215 | 南湾 | express | R41 | 2026-09-05T10:00:00Z | 2026-09-05T18:00:00Z | on_time | 0 | 0 |
| O0216 | 南湾 | express | R42 | 2026-09-14T21:00:00Z | 2026-09-15T05:00:00Z | not_mature | 0 | 0 |
learner/materials/rules.json 阅读完整文件
下载文件{
"cutoff": "2026-09-15T00:00:00Z",
"late_target": 0.1,
"min_sample": 15,
"review_gap_pp": 5,
"priority_gap_pp": 15,
"standard_weight": 0.5,
"express_weight": 0.5
}learner/materials/data-dictionary.md 阅读完整文件
下载文件数据字典与口径
业务工作单
你加入冷链履约运营项目组。运营负责人需要回答:哪些订单与站点需要先处理、导出接口哪里存在控制缺口,以及下一版工作台应交付什么。四个站点为海港、东城、西岭、南湾。standard 承诺 24 h,express 承诺 8 h;具体截止时间以 orders.csv 的 due_at 为准。
材料覆盖 2026 年 9 月的订单及事件,统一复盘截止点为 rules.json 的 cutoff。所有业务时间转 UTC;本地显示时可以换时区,但计算不能把无时区字符串当成本地时间。输入可包含截止点之后的事件,用于检查是否错误使用未来信息。
orders.csv
- order_id:唯一订单号,字符串,不转成数字。
- hub:站点名;service:standard/express;route:线路编号。
- created_at:带时区的下单时刻;due_at:承诺交付时刻,UTC ISO 8601。
- 一行代表一个订单,事件不等于订单;不要按事件行数统计订单。
两个事件源
- A:event_id → event_id;order_ref → order_id;hub → hub;service → service;event → kind;event_time → happened_at。
- B:id → event_id;shipment.number → order_id;shipment.station → hub;shipment.product → service;action 的 OPEN/COLLECT/DROP/VOID 映射 created/picked_up/delivered/cancelled;at_ms 为整数 Unix 毫秒,输出为 UTC ISO 时间。
- 标准事件必须且只需包含 event_id、order_id、hub、service、kind、happened_at。来源文件与行号写入异常/重复清单。
- 同 event_id 标准内容完全相同:只留一条,其他计 exact_replay。同 event_id 内容不同:整组隔离,不能先到先得。坏字段、未知动作或无时区时间:隔离并保留来源及原因。
- 禁止原地修改原始材料。对账:原始事件数 = 标准事件数 + 隔离记录数 + 重复剔除数。
截止日履约口径
按订单聚合,先只保留 happened_at ≤ cutoff 的事件。取消单优先排除;due_at > cutoff 的非取消单记 not_mature。其他订单:截止前无交付记 overdue_open;首次交付时刻 > due_at 记 delivered_late;其余 on_time。恰好到期算成熟,恰好交付算准时。
成熟分母 = on_time + delivered_late + overdue_open。迟交分子 = delivered_late + overdue_open。取消与未到期均不得填为准时。已交付迟交分钟按交付时间减 due_at,未交付逾期分钟按 cutoff 减 due_at,两者单列。此材料不包含退款、食物损坏或实际成本,不能推出这些金额。
服务审查口径
rules.json 固定目标迟交率为 10%,最小成熟样本 15。差距用百分点,不用百分比变化。成熟样本 <15 优先归“待补样本”;差距 >15 个百分点归“优先处理”;>5 且 ≤15 归“需要复核”;≤5 归“达到阈值”。这些是本次运营审查规则,不是统计显著性或公平性的证明。
统一服务结构比较:standard 和 express 各 50% 权重。两个服务层均满足最小样本才计算站点标准化迟交率;否则保留空值并说明缺口。不得用无依据的总体平均填补小样本。业务假设须与观察事实分开。
访问日志与授权策略
access-log.csv 一行一个请求。request_id 唯一;at 为 UTC;user、session、role 为请求上下文;method、path 为路由;status 为响应码;rows、bytes 是网关响应计数。它们不证明唯一客户数,也不证明接收者已使用数据。
access-policy.json 是本次调查的授权基线。operator 只能读取被授权站点,不能 export。supervisor 与 service 允许导出。登录成功后 session 有效 30 分钟,恰好 30 分钟有效;之后应拒绝。401 请求代表被拒绝的尝试,不是成功泄露。svc-archive 是批准的归档账号,频繁大批导出不能只因次数高就定性。日志没有文件正文、终端取证或 VPN 会话记录,不能据此归属自然人、地理位置或入口路径。
步骤
- 先按 hub×service 汇总成熟数与迟交数。可用表格透视或 Python;直接使用订单表,不从已汇总百分比反推人数。
- 计算 late/eligible,与 10% 目标相减后乘 100 得 gap_pp。按字典先判样本,再判 >15、>5 的区间;为 5、15 的恰好值补测试。
- 输出 service-review.csv,保留每格的样本量、迟交数、比例、目标、百分点差与建议。
- 按 standard 50%+express 50% 重新计算每个站点的标准化迟交率;任一层样本不足 15,整站比较值为空并显示待补样本。
- 并排比较原始率与标准化率,解释东城 express 占比较高的影响;不要将标准化当成因果证明。
- 写 review-memo.md,明确南湾缺少哪一层、还需多少条成熟订单,给出运营复核行动与不能得出的结论。
完整成果
服务时效差异审查备忘录
复核顺序
海港 express(18/18)与海港 standard(14/37)应先复核。东城 express(26/37)也需优先处理。南湾 express 只有 4 条成熟订单,1 条迟交,先补样本,不能按 25% 做稳定的站点排名。
| 站点 | 原始迟交率 | 统一服务结构后的迟交率 |
|---|---|---|
| 东城 | 56.36% | 49.02% |
| 南湾 | 21.88% | 待补样本 |
| 海港 | 58.18% | 68.92% |
| 西岭 | 36.36% | 38.64% |
计算与解释
每格迟交率为 late/eligible,目标为 10%;gap_pp = (late_rate − 0.10) × 100。样本不足先归“待补样本”,再按 >15、>5 判定。恰好差 15 个百分点属于“需要复核”,不是“优先处理”;恰好差 5 属于“达到阈值”。
统一结构率 = 0.5 × standard 率 + 0.5 × express 率。东城 express 占成熟订单的 37/55,原始率 56.36%;改用相等权重后为 49.02%。海港 express 只占 18/55,统一权重后由 58.18% 上升至 68.92%。服务结构会影响总体比较,不应把原始差异全部解释为站点表现。
数据缺口与下一步
南湾 express 至少还需 11 条成熟订单才能达到本次 15 条门槛;新增结果可能改变当前比例。补数据时固定同一时段、订单口径和观察窗口,并保留取消与未到期记录。达到 15 只是业务复核门槛,不是统计显著性证明。
本次比较不含天气、线路距离、客户预约或班次因素,不足以归责个人、证明不公平或预测改善效果。下一步核对海港 express 的发车班次和交接扫描,比较同路线/服务/时段后再提出流程实验。
下载文件参考答案
instructor/answers/service-review.csv 阅读完整文件
下载文件| hub | service | eligible | late | late_rate | target | gap_pp | review |
|---|---|---|---|---|---|---|---|
| 东城 | express | 37 | 26 | 0.702703 | 0.1 | 60.27 | 优先处理 |
| 东城 | standard | 18 | 5 | 0.277778 | 0.1 | 17.778 | 优先处理 |
| 南湾 | express | 4 | 1 | 0.25 | 0.1 | 15.0 | 待补样本 |
| 南湾 | standard | 28 | 6 | 0.214286 | 0.1 | 11.429 | 需要复核 |
| 海港 | express | 18 | 18 | 1.0 | 0.1 | 90.0 | 优先处理 |
| 海港 | standard | 37 | 14 | 0.378378 | 0.1 | 27.838 | 优先处理 |
| 西岭 | express | 22 | 11 | 0.5 | 0.1 | 40.0 | 优先处理 |
| 西岭 | standard | 33 | 9 | 0.272727 | 0.1 | 17.273 | 优先处理 |
instructor/answers/standardized-comparison.csv 阅读完整文件
下载文件| hub | standardized_late_rate | status |
|---|---|---|
| 东城 | 0.49024 | 可比较 |
| 南湾 | 待补样本 | |
| 海港 | 0.689189 | 可比较 |
| 西岭 | 0.386363 | 可比较 |
完整参考实现 阅读完整文件
下载文件"""Reference implementation for the Ape Intern cold-chain operations lab."""
import csv,json
from collections import defaultdict,Counter
from datetime import datetime,timezone
from pathlib import Path
from urllib.parse import urlparse,parse_qs
UTC=timezone.utc
KINDS={'OPEN':'created','COLLECT':'picked_up','DROP':'delivered','VOID':'cancelled'}
HUBS={'海港','东城','西岭','南湾'}
def parse_time(value):
t=datetime.fromisoformat(value.replace('Z','+00:00'))
if t.tzinfo is None:raise ValueError('timezone_required')
return t.astimezone(UTC)
def iso(t):return t.isoformat(timespec='seconds').replace('+00:00','Z')
def readcsv(p):
with Path(p).open(encoding='utf-8-sig',newline='') as f:return list(csv.DictReader(f))
def writecsv(p,rows,fields=None):
rows=list(rows)
with Path(p).open('w',encoding='utf-8-sig',newline='') as f:
w=csv.DictWriter(f,fieldnames=fields or list(rows[0]));w.writeheader();w.writerows(rows)
def dump(p,value):Path(p).write_text(json.dumps(value,ensure_ascii=False,indent=2)+'\n')
def _normalize(record,source):
if source=='A':
e=dict(event_id=record['event_id'],order_id=record['order_ref'],hub=record['hub'],service=record['service'],kind=record['event'],happened_at=iso(parse_time(record['event_time'])))
else:
ms=record['at_ms']
if type(ms) is not int:raise ValueError('epoch_must_be_integer')
e=dict(event_id=record['id'],order_id=record['shipment']['number'],hub=record['shipment']['station'],service=record['shipment']['product'],kind=KINDS[record['action']],happened_at=iso(datetime.fromtimestamp(ms/1000,UTC)))
if e['kind'] not in KINDS.values():raise ValueError('unsupported_event')
if e['hub'] not in HUBS or e['service'] not in {'standard','express'}:raise ValueError('unknown_dimension')
if not e['event_id'] or not e['order_id']:raise ValueError('empty_key')
return e
def normalize(record,source):
try:return _normalize(record,source)
except (KeyError,TypeError,OverflowError) as error:raise ValueError(str(error).strip("'")) from error
def ingest(data):
grouped=defaultdict(list);rejected=[];duplicates=[]
for source,name in [('A','dispatch-a.jsonl'),('B','courier-b.jsonl')]:
for line,text in enumerate((data/name).read_text().splitlines(),1):
loc={'source':name,'line':line}
try:
event=normalize(json.loads(text),source);grouped[event['event_id']].append((event,loc))
except (ValueError,KeyError,TypeError,OverflowError) as ex:
rejected.append(dict(loc,reason=str(ex).strip("'")))
accepted=[]
for eid,items in grouped.items():
distinct={json.dumps(e,sort_keys=True,ensure_ascii=False) for e,loc in items}
if len(distinct)>1:
rejected.extend(dict(loc,reason='immutable_id_conflict') for e,loc in items);continue
accepted.append(items[0][0])
duplicates.extend(dict(loc,event_id=eid,reason='exact_replay') for e,loc in items[1:])
accepted.sort(key=lambda e:(e['happened_at'],e['event_id']))
return accepted,rejected,duplicates
def classify_order(order,events,cutoff):
# Only facts available at cutoff can influence a retrospective result.
visible=[e for e in events if parse_time(e['happened_at'])<=cutoff]
visible.sort(key=lambda e:parse_time(e['happened_at']))
delivered=[parse_time(e['happened_at']) for e in visible if e['kind']=='delivered']
cancelled=any(e['kind']=='cancelled' for e in visible)
due=parse_time(order['due_at'])
if cancelled:state='cancelled'
elif due>cutoff:state='not_mature'
elif not delivered:state='overdue_open'
elif min(delivered)>due:state='delivered_late'
else:state='on_time'
delay=round((min(delivered)-due).total_seconds()/60) if state=='delivered_late' else 0
overdue=round((cutoff-due).total_seconds()/60) if state=='overdue_open' else 0
return dict(order,cohort=state,late_minutes=delay,overdue_minutes=overdue)
def aggregate(rows,keys):
groups=defaultdict(list)
for row in rows:groups[tuple(row[k] for k in keys)].append(row)
result=[]
for dims,records in sorted(groups.items()):
counts=Counter(r['cohort'] for r in records)
eligible=sum(counts[x] for x in ['on_time','delivered_late','overdue_open'])
late=counts['delivered_late']+counts['overdue_open']
result.append(dict(zip(keys,dims),total=len(records),eligible=eligible,late=late,late_rate=round(late/eligible,6) if eligible else None,on_time=counts['on_time'],delivered_late=counts['delivered_late'],overdue_open=counts['overdue_open'],cancelled=counts['cancelled'],not_mature=counts['not_mature'],delivered_late_minutes=sum(r['late_minutes'] for r in records),open_overdue_minutes=sum(r['overdue_minutes'] for r in records)))
return result
def service_band(rate,n,rules):
if n<rules['min_sample']:return '待补样本'
gap=(rate-rules['late_target'])*100
if gap>rules['priority_gap_pp']:return '优先处理'
if gap>rules['review_gap_pp']:return '需要复核'
return '达到阈值'
def fairness(hub_tiers,rules):
rows=[]
for x in hub_tiers:
rate=x['late_rate'];rows.append(dict(hub=x['hub'],service=x['service'],eligible=x['eligible'],late=x['late'],late_rate=rate,target=rules['late_target'],gap_pp=round((rate-rules['late_target'])*100,3) if rate is not None else None,review=service_band(rate,x['eligible'],rules)))
standardized=[]
for hub in sorted(HUBS):
parts=[r for r in rows if r['hub']==hub]
enough=len(parts)==2 and all(r['eligible']>=rules['min_sample'] for r in parts)
value=sum(r['late_rate']*rules[r['service']+'_weight'] for r in parts) if enough else None
standardized.append(dict(hub=hub,standardized_late_rate=round(value,6) if value is not None else None,status='可比较' if enough else '待补样本'))
return rows,standardized
def investigate(logs,policy):
logins={};findings=[]
for row in sorted(logs,key=lambda r:(r['at'],r['request_id'])):
t=parse_time(row['at']);status=int(row['status']);route=urlparse(row['path']);query=parse_qs(route.query)
if route.path=='/login' and status==200:logins[(row['user'],row['session'])]=t;continue
if status!=200:continue
types=[]
if route.path=='/export' and row['role'] not in policy['export_roles']:types.append('unauthorised_export')
hub=query.get('hub',[''])[0]
if row['role']=='operator' and hub and hub!=policy['operator_hub'].get(row['user']):types.append('hub_scope_violation')
login=logins.get((row['user'],row['session']))
if login is None or (t-login).total_seconds()>policy['session_ttl_minutes']*60:types.append('expired_or_missing_session')
if types:findings.append(dict(request_id=row['request_id'],at=row['at'],user=row['user'],session=row['session'],finding=';'.join(types),status=status,rows=int(row['rows']),bytes=int(row['bytes'])))
return findings
def solve(data,out):
data=Path(data);out=Path(out);out.mkdir(parents=True,exist_ok=True)
events,rejects,dups=ingest(data)
(out/'canonical-events.jsonl').write_text(''.join(json.dumps(e,ensure_ascii=False)+'\n' for e in events))
writecsv(out/'rejected.csv',rejects);writecsv(out/'duplicates.csv',dups)
rules=json.loads((data/'rules.json').read_text());cutoff=parse_time(rules['cutoff'])
by_order=defaultdict(list)
for e in events:by_order[e['order_id']].append(e)
orders=readcsv(data/'orders.csv')
records=[classify_order(o,by_order[o['order_id']],cutoff) for o in orders]
writecsv(out/'order-review.csv',records)
hubs=aggregate(records,['hub']);tiers=aggregate(records,['hub','service']);routes=aggregate(records,['route'])
writecsv(out/'hub-metrics.csv',hubs);writecsv(out/'route-metrics.csv',routes)
bands,std=fairness(tiers,rules)
writecsv(out/'service-review.csv',bands);writecsv(out/'standardized-comparison.csv',std)
findings=investigate(readcsv(data/'access-log.csv'),json.loads((data/'access-policy.json').read_text()))
writecsv(out/'security-findings.csv',findings)
summary=dict(orders=len(orders),accepted_events=len(events),rejected=len(rejects),duplicates=len(dups),cohorts=dict(Counter(r['cohort'] for r in records)),hubs=hubs,service_review=bands,standardized=std,security=dict(flagged_requests=len(findings),potential_export_rows=sum(f['rows'] for f in findings if 'unauthorised_export' in f['finding']),potential_export_bytes=sum(f['bytes'] for f in findings if 'unauthorised_export' in f['finding']),findings=findings))
dump(out/'results.json',summary)
return summary
if __name__=='__main__':
import sys
print(json.dumps(solve(sys.argv[1],sys.argv[2]),ensure_ascii=False,indent=2))
百分比与百分点不同;小样本的低迟交率不能用作“最公平”或“最好”的业务结论。
每项 20 分,14 分及以上且没有关键口径错误再进入下一次 Review。原始数据被改写、静默丢记录、分母含未到期、把 401 算成泄露、用小样本硬排站点或把前端筛选当授权,均须修正后再验收。
- 分层分母与目标计算 6 分
- 阈值边界和小样本优先 5 分
- 标准化及缺失值 5 分
- 结论解释和后续采样 4 分