{"cells":[{"metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"cell_type":"code","source":"import numpy as np\nimport pandas as pd","execution_count":1,"outputs":[]},{"metadata":{"_cell_guid":"79c7e3d0-c299-4dcb-8224-4455121ee9b0","_uuid":"d629ff2d2480ee46fbb7e2d37f6b5fab8052498a","trusted":true},"cell_type":"code","source":"%%time\ntrain = pd.read_csv(\"../input/train.csv\")\n\ny_train = train['scalar_coupling_constant']\ngroups = train['type']","execution_count":2,"outputs":[{"output_type":"stream","text":"CPU times: user 3.18 s, sys: 1.21 s, total: 4.39 s\nWall time: 4.4 s\n","name":"stdout"}]},{"metadata":{"trusted":true},"cell_type":"code","source":"def group_mean_log_mae(y_true, y_pred, groups, floor=1e-9):\n    maes = (y_true-y_pred).abs().groupby(groups).mean()\n    return np.log(maes.map(lambda x: max(x, floor))).mean()","execution_count":3,"outputs":[]},{"metadata":{"trusted":true},"cell_type":"code","source":"# zeros prediction\ngroup_mean_log_mae(y_train, 0, groups)","execution_count":4,"outputs":[{"output_type":"execute_result","execution_count":4,"data":{"text/plain":"1.997412159590857"},"metadata":{}}]},{"metadata":{"trusted":true},"cell_type":"code","source":"# best possible prediction\ngroup_mean_log_mae(y_train, y_train, groups)","execution_count":5,"outputs":[{"output_type":"execute_result","execution_count":5,"data":{"text/plain":"-20.72326583694641"},"metadata":{}}]},{"metadata":{},"cell_type":"markdown","source":"### Check Speed"},{"metadata":{"trusted":true},"cell_type":"code","source":"%timeit group_mean_log_mae(y_train, y_train, groups)","execution_count":6,"outputs":[{"output_type":"stream","text":"351 ms ± 2.23 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n","name":"stdout"}]}],"metadata":{"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"name":"python","version":"3.6.4","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"}},"nbformat":4,"nbformat_minor":1}