{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"nvidiaTeslaT4","dataSources":[{"sourceId":84493,"databundleVersionId":9871156,"sourceType":"competition"}],"dockerImageVersionId":30805,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n\nimport os\nfor dirname, _, filenames in os.walk('/kaggle/input'):\n    for filename in filenames:\n        print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-22T10:17:30.245989Z","iopub.execute_input":"2024-12-22T10:17:30.246264Z","iopub.status.idle":"2024-12-22T10:17:30.608192Z","shell.execute_reply.started":"2024-12-22T10:17:30.246238Z","shell.execute_reply":"2024-12-22T10:17:30.607243Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"Train = True\nfolds = 6","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T10:17:30.609326Z","iopub.execute_input":"2024-12-22T10:17:30.609731Z","iopub.status.idle":"2024-12-22T10:17:30.613593Z","shell.execute_reply.started":"2024-12-22T10:17:30.609692Z","shell.execute_reply":"2024-12-22T10:17:30.612754Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import joblib\nimport gc\n\nimport lightgbm as lgb\nimport xgboost as xgb\nimport catboost as cbt\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T10:17:30.616254Z","iopub.execute_input":"2024-12-22T10:17:30.616965Z","iopub.status.idle":"2024-12-22T10:17:33.398481Z","shell.execute_reply.started":"2024-12-22T10:17:30.616923Z","shell.execute_reply":"2024-12-22T10:17:33.397552Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"model_dic = {\n    'lgb': lgb.LGBMRegressor(n_estimators=1000, device='gpu', gpu_use_dp=True, objective='l2'),\n    'xgb': xgb.XGBRegressor(n_estimators=2000, learning_rate=0.1, max_depth=10, tree_method='hist', device=\"cuda\", objective='reg:squarederror'),\n    'cbt': cbt.CatBoostRegressor(iterations=1000, learning_rate=0.1, loss_function='RMSE')\n}","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T10:17:33.39954Z","iopub.execute_input":"2024-12-22T10:17:33.400011Z","iopub.status.idle":"2024-12-22T10:17:33.404466Z","shell.execute_reply.started":"2024-12-22T10:17:33.399982Z","shell.execute_reply":"2024-12-22T10:17:33.403649Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def preprocess(data):\n    data.drop(['date_id', 'time_id', 'symbol_id','weight','responder_0', 'responder_1', 'responder_2', 'responder_3', 'responder_4', 'responder_5', 'responder_7', 'responder_8'], axis=1, inplace=True)\n    X = data.drop(['responder_6'], axis=1)\n    y = data.responder_6\n    return X, y ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T10:17:33.405656Z","iopub.execute_input":"2024-12-22T10:17:33.406435Z","iopub.status.idle":"2024-12-22T10:17:33.413523Z","shell.execute_reply.started":"2024-12-22T10:17:33.406393Z","shell.execute_reply":"2024-12-22T10:17:33.41279Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def test(fold, model_name):\n    model = model_dic[model_name]\n\n    data  = pd.DataFrame()\n    for i in range(5, 10):\n        data = pd.concat([data, pd.read_parquet(f'/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet')])  \n    print(len(data))    \n    if fold < folds//2:\n        split = len(data) // (folds//2)\n        print(split)\n        data = pd.concat([data.iloc[:split*fold],data.iloc[split*(fold+1):]])\n\n    \n    if fold >= folds//2:\n        split_point = fold % folds//2\n        split = len(data) // (folds//2)\n        print(split)\n        data = pd.concat([data.iloc[:split*split_point],data.iloc[split*(split_point+1):]])\n    X, y = preprocess(data)\n    \n    print(len(data))\n        ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T10:17:33.414424Z","iopub.execute_input":"2024-12-22T10:17:33.414634Z","iopub.status.idle":"2024-12-22T10:17:33.423778Z","shell.execute_reply.started":"2024-12-22T10:17:33.414613Z","shell.execute_reply":"2024-12-22T10:17:33.422926Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def train(fold, model_name):\n    if model_name == 'lgb':\n        model = model_dic[model_name]\n\n        data  = pd.DataFrame()\n        for i in range(4):\n            data = pd.concat([data, pd.read_parquet(f'/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet')])  \n           \n        if fold < 2:\n            split = len(data)//2 \n            data = pd.concat([data.iloc[:split*fold],data.iloc[split*(fold+1):]])\n       \n        X, y = preprocess(data)\n        \n        del data\n        gc.collect()\n        \n        model.fit(X, y)\n\n        del X, y\n        gc.collect()\n\n        # second training\n        \n        data  = pd.DataFrame()\n        for i in range(4, 7):\n            data = pd.concat([data, pd.read_parquet(f'/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet')])  \n        \n        if 1 < fold < 4 :\n            split_point = fold % 2\n            split = len(data) // 2\n            data = pd.concat([data.iloc[:split*split_point],data.iloc[split*(split_point+1):]])\n    \n        X, y = preprocess(data)\n        del data\n        gc.collect()\n        \n        model.fit(X, y, init_model=model)\n\n        del  X, y\n        gc.collect()\n\n        # third trainig\n\n        data  = pd.DataFrame()\n        for i in range(7, 10):\n            data = pd.concat([data, pd.read_parquet(f'/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet')])  \n        \n        if fold > 3 :\n            split_point = fold % 2\n            split = len(data) // 2\n            data = pd.concat([data.iloc[:split*split_point],data.iloc[split*(split_point+1):]])\n    \n        X, y = preprocess(data)\n        del data\n        gc.collect()\n        \n        model.fit(X, y, init_model=model)\n\n        del X, y\n        gc.collect()\n                    \n        joblib.dump(model, f'/kaggle/working/{model_name}_{fold}.model')\n\n        \n\n    elif model_name == 'xgb':\n        model = model_dic[model_name]\n\n        data  = pd.DataFrame()\n        for i in range(4):\n            data = pd.concat([data, pd.read_parquet(f'/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet')])  \n           \n        if fold < 2:\n            split = len(data)//2 \n            data = pd.concat([data.iloc[:split*fold],data.iloc[split*(fold+1):]])\n       \n        X, y = preprocess(data)\n        \n        del data\n        gc.collect()\n\n        model.fit(X, y,verbose=100)\n\n        del  X, y\n        gc.collect()\n\n        # second training\n\n        data  = pd.DataFrame()\n        for i in range(4, 7):\n            data = pd.concat([data, pd.read_parquet(f'/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet')])  \n        \n        if 1 < fold < 4 :\n            split_point = fold % 2\n            split = len(data) // 2\n            data = pd.concat([data.iloc[:split*split_point],data.iloc[split*(split_point+1):]])\n    \n        X, y = preprocess(data)\n        del data\n        gc.collect()\n        \n        model.fit(X, y, verbose=100, xgb_model=model.get_booster())\n                    \n        del X, y\n        gc.collect()\n\n        # third training\n\n        data  = pd.DataFrame()\n        for i in range(7, 10):\n            data = pd.concat([data, pd.read_parquet(f'/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet')])  \n        \n        if 3 < fold < 6 :\n            split_point = fold % 2\n            split = len(data) // 2\n            data = pd.concat([data.iloc[:split*split_point],data.iloc[split*(split_point+1):]])\n    \n        X, y = preprocess(data)\n        del data\n        gc.collect()\n        \n        model.fit(X, y, verbose=100, xgb_model=model.get_booster())\n                    \n        del X, y\n        gc.collect()\n\n                     \n        joblib.dump(model, f'/kaggle/working/{model_name}_{fold}.model')\n        \n    else:\n        model = model_dic[model_name]\n\n        data  = pd.DataFrame()\n        for i in range(4):\n            data = pd.concat([data, pd.read_parquet(f'/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet')])  \n           \n        if fold < 2:\n            split = len(data)//2 \n            data = pd.concat([data.iloc[:split*fold],data.iloc[split*(fold+1):]])\n       \n        X, y = preprocess(data)\n        \n        del data\n        gc.collect()\n        \n        model.fit(X, y, early_stopping_rounds=100)\n\n        del X, y\n        gc.collect()\n\n        # second training\n\n        data  = pd.DataFrame()\n        for i in range(4, 7):\n            data = pd.concat([data, pd.read_parquet(f'/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet')])  \n        \n        if 1 < fold < 4 :\n            split_point = fold % 2\n            split = len(data) // 2\n            data = pd.concat([data.iloc[:split*split_point],data.iloc[split*(split_point+1):]])\n    \n        X, y = preprocess(data)\n        \n        del data\n        gc.collect()\n        \n        model.fit(X, y, init_model=model, early_stopping_rounds=100)\n\n        del X, y\n        gc.collect()  \n\n        # third traing\n        data  = pd.DataFrame()\n        for i in range(7, 10):\n            data = pd.concat([data, pd.read_parquet(f'/kaggle/input/jane-street-real-time-market-data-forecasting/train.parquet/partition_id={i}/part-0.parquet')])  \n        \n        if fold > 3 :\n            split_point = fold % 2\n            split = len(data) // 2\n            data = pd.concat([data.iloc[:split*split_point],data.iloc[split*(split_point+1):]])\n    \n    \n        X, y = preprocess(data)\n        \n        del data\n        gc.collect()\n        \n        model.fit(X, y, init_model=model, early_stopping_rounds=100)\n\n        del X, y\n        gc.collect()       \n            \n            \n        joblib.dump(model, f'/kaggle/working/{model_name}_{fold}.model')\n        \n    \n     ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T10:17:33.42505Z","iopub.execute_input":"2024-12-22T10:17:33.425316Z","iopub.status.idle":"2024-12-22T10:17:33.446334Z","shell.execute_reply.started":"2024-12-22T10:17:33.425292Z","shell.execute_reply":"2024-12-22T10:17:33.44538Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"if Train:\n    for fold in range(folds):\n        train(fold, \"lgb\")\n    \n    \n    ","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-22T10:17:33.447364Z","iopub.execute_input":"2024-12-22T10:17:33.447679Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}