{"metadata":{"kaggle":{"accelerator":"none","dataSources":[{"sourceId":50160,"databundleVersionId":7602123,"sourceType":"competition"}],"dockerImageVersionId":30646,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.10.13","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"papermill":{"default_parameters":{},"duration":7.602135,"end_time":"2024-02-23T08:47:19.591432","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-02-23T08:47:11.989297","version":"2.5.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport matplotlib.pyplot as plt\n\n\ndef gini_stability_slide_window(gini_in_time, w_fallingrate=88.0, w_resstd=-0.5, win=10):\n    x = np.arange(len(gini_in_time))\n    y = gini_in_time\n    a, b = np.polyfit(x, y, 1)\n    y_hat = a*x + b\n    residuals = y - y_hat\n    res_std = np.std(residuals)\n    avg_gini = np.mean(gini_in_time)\n    \n    # The countermeasures for hacking in the first segment\n    x_past = np.arange(1-win, 0)\n    x = np.hstack([x_past, x])\n    y = np.hstack([np.ones_like(x_past), y])\n    \n    # linear regression in each segment\n    a1_lst = []\n    for start_index in range(0, len(x)-win+1):\n        end_index = start_index + win\n        x1 = x[start_index:end_index]\n        y1 = y[start_index:end_index]\n        a1, _ = np.polyfit(x1, y1, 1)\n        a1_lst.append(min(0,a1))       \n    a1_avg = np.mean(a1_lst)\n\n    return avg_gini + w_fallingrate * a1_avg + w_resstd * res_std \n\n\ndef visualize(ginis, ginis_hacked):\n    fig, ax = plt.subplots()\n    ax.plot(ginis, \n            label='ginis: metric={:.3f}'.format(gini_stability_slide_window(ginis)))\n    ax.plot(ginis_hacked, linestyle='--', \n            label='ginis_hacked: metric={:.3f}'.format(gini_stability_slide_window(ginis_hacked)))\n    ax.set_title('gini_stability_slide_window')\n    ax.legend()\n    plt.show()\n    plt.close()","metadata":{"papermill":{"duration":1.672264,"end_time":"2024-02-23T08:47:16.880964","exception":false,"start_time":"2024-02-23T08:47:15.208700","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-02-23T17:51:49.224424Z","iopub.execute_input":"2024-02-23T17:51:49.224853Z","iopub.status.idle":"2024-02-23T17:51:49.254149Z","shell.execute_reply.started":"2024-02-23T17:51:49.224831Z","shell.execute_reply":"2024-02-23T17:51:49.253419Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# data for experiments\nn = 50\nweek_nums = np.arange(n)\n\nnp.random.seed(0)\nginis = (0.9 - 0.0005*np.arange(n)) + 0.01*np.random.randn(n) # original gini scores","metadata":{"papermill":{"duration":0.015718,"end_time":"2024-02-23T08:47:16.923082","exception":false,"start_time":"2024-02-23T08:47:16.907364","status":"completed"},"tags":[],"execution":{"iopub.status.busy":"2024-02-23T17:51:49.255414Z","iopub.execute_input":"2024-02-23T17:51:49.255630Z","iopub.status.idle":"2024-02-23T17:51:49.259654Z","shell.execute_reply.started":"2024-02-23T17:51:49.255612Z","shell.execute_reply":"2024-02-23T17:51:49.258966Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# hacking 1\nginis_hacked = ginis.copy()\nginis_hacked[0] -= 0.03 # hacked gini scores\n\nvisualize(ginis, ginis_hacked)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# hacking 2\nginis_hacked = ginis.copy()\nginis_hacked[:20] -= 0.01 # hacked gini scores\n\nvisualize(ginis, ginis_hacked)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# hacking 3\nginis_hacked = ginis.copy()\nginis_hacked[np.arange(0, n, 10)] -= 0.05 # hacked gini scores\n\nvisualize(ginis, ginis_hacked)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}