{
  "id": 286676,
  "title": "1st Place of Jane Street 🏆 ➜ Adapted to Crypto 👌",
  "url": "/competitions/g-research-crypto-forecasting/discussion/286676",
  "author_name": "",
  "post_date": "2021-11-10T08:05:04.280294300Z",
  "votes": 36,
  "comment_count": 9,
  "views": 0,
  "content": "<h1></h1>\n<blockquote>\n  <p><strong>TL;DR:</strong> <a href=\"https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto\" target=\"_blank\">Here it is</a></p>\n</blockquote>\n<p>Hi Guys, </p>\n<p>I just finished converting the <a href=\"https://www.kaggle.com/gogo827jz/jane-street-supervised-autoencoder-mlp\" target=\"_blank\">1st place winning solution</a> of Yirun Zhang from <a href=\"https://www.kaggle.com/c/jane-street-market-prediction\" target=\"_blank\">Jane Street</a> market prediction competition earlier this year. </p>\n<p>The notebook is <a href=\"https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto\" target=\"_blank\">right here</a>.</p>\n<p>It is a simple starter notebook using purged group time series. There are many configuration variables to allow you to experiment. Use either GPU or TPU. You can control which years are loaded, which neural networks are used, and whether to use feature engineering. </p>\n<p>You can experiment with different data preprocessing, model architecture, loss, optimizers, and learning rate schedules. The extra datasets contain the full history of the assets at the same format of the competition, so you can input that into your model too.</p>\n<hr>\n<p><strong>The solution: Encoder + MLP</strong>:</p>\n<p><img src=\"https://i.ibb.co/ggGrsV5/download.png\" alt=\"\"></p>\n<p>The main idea of using an encoder is the denoise the data. After many attempts at using an unsupervised autoencoder, the choice landed on a bottleneck encoder as this will preserve the intra-feature relations.</p>\n<p><strong>Main Ideas:</strong></p>\n<p>In Jane street competition, Yirun has used a supervised autoencoder MLP approach and his teammates use XGBoost. Their final submission is a simple blend of these two models. Here, We explain Yirun's approach in detail.</p>\n<p>The supervised autoencoder approach was initially proposed in <a href=\"https://www.kaggle.com/aimind/bottleneck-encoder-mlp-keras-tuner-8601c5\" target=\"_blank\">Bottleneck encoder + MLP + Keras Tuner</a> and was adapted to this competition <a href=\"https://www.kaggle.com/yamqwe/bottleneck-encoder-mlp-keras-tuner\" target=\"_blank\">here</a>, where one supervised autoencoder is trained separately before cross-validation (CV) split. Yirun have realized that this training may cause label leakage because the autoencoder has seen part of the data in the validation set in each CV split and it can generate label-leakage features to overfit. So, his approach was to train the supervised autoencoder along with MLP in one model in each CV split. The training processes and explanations are given in the notebook and the following statements.</p>\n<p><strong>The Model:</strong></p>\n<ul>\n<li>Use autoencoder to create new features, concatenating with the original features as the input to the downstream MLP model</li>\n<li>Train autoencoder and MLP together in each CV split to prevent data leakage</li>\n<li>Add target information to autoencoder (supervised learning) to force it to generate more relevant features, and to create a shortcut for backpropagation of gradient</li>\n<li>Add Gaussian noise layer before encoder for data augmentation and to prevent overfitting</li>\n<li>Use swish activation function instead of ReLU to prevent ‘dead neuron’ and smooth the gradient</li>\n<li>Batch Normalisation and Dropout are used for MLP</li>\n<li>Use Keras Tuner to find the optimal hyperparameter set</li>\n</ul>\n<p>This notebook follows the ideas presented in my \"Initial Thoughts\" [here][1]. </p>\n<p>Happy Kaggling! <br>\nCheers ^^</p>",
  "messages": [
    {
      "id": "1577600",
      "postDate": "11/10/2021 08:05:04",
      "content": "<h1></h1>\n<blockquote>\n  <p><strong>TL;DR:</strong> <a href=\"https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto\" target=\"_blank\">Here it is</a></p>\n</blockquote>\n<p>Hi Guys, </p>\n<p>I just finished converting the <a href=\"https://www.kaggle.com/gogo827jz/jane-street-supervised-autoencoder-mlp\" target=\"_blank\">1st place winning solution</a> of Yirun Zhang from <a href=\"https://www.kaggle.com/c/jane-street-market-prediction\" target=\"_blank\">Jane Street</a> market prediction competition earlier this year. </p>\n<p>The notebook is <a href=\"https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto\" target=\"_blank\">right here</a>.</p>\n<p>It is a simple starter notebook using purged group time series. There are many configuration variables to allow you to experiment. Use either GPU or TPU. You can control which years are loaded, which neural networks are used, and whether to use feature engineering. </p>\n<p>You can experiment with different data preprocessing, model architecture, loss, optimizers, and learning rate schedules. The extra datasets contain the full history of the assets at the same format of the competition, so you can input that into your model too.</p>\n<hr>\n<p><strong>The solution: Encoder + MLP</strong>:</p>\n<p><img src=\"https://i.ibb.co/ggGrsV5/download.png\" alt=\"\"></p>\n<p>The main idea of using an encoder is the denoise the data. After many attempts at using an unsupervised autoencoder, the choice landed on a bottleneck encoder as this will preserve the intra-feature relations.</p>\n<p><strong>Main Ideas:</strong></p>\n<p>In Jane street competition, Yirun has used a supervised autoencoder MLP approach and his teammates use XGBoost. Their final submission is a simple blend of these two models. Here, We explain Yirun's approach in detail.</p>\n<p>The supervised autoencoder approach was initially proposed in <a href=\"https://www.kaggle.com/aimind/bottleneck-encoder-mlp-keras-tuner-8601c5\" target=\"_blank\">Bottleneck encoder + MLP + Keras Tuner</a> and was adapted to this competition <a href=\"https://www.kaggle.com/yamqwe/bottleneck-encoder-mlp-keras-tuner\" target=\"_blank\">here</a>, where one supervised autoencoder is trained separately before cross-validation (CV) split. Yirun have realized that this training may cause label leakage because the autoencoder has seen part of the data in the validation set in each CV split and it can generate label-leakage features to overfit. So, his approach was to train the supervised autoencoder along with MLP in one model in each CV split. The training processes and explanations are given in the notebook and the following statements.</p>\n<p><strong>The Model:</strong></p>\n<ul>\n<li>Use autoencoder to create new features, concatenating with the original features as the input to the downstream MLP model</li>\n<li>Train autoencoder and MLP together in each CV split to prevent data leakage</li>\n<li>Add target information to autoencoder (supervised learning) to force it to generate more relevant features, and to create a shortcut for backpropagation of gradient</li>\n<li>Add Gaussian noise layer before encoder for data augmentation and to prevent overfitting</li>\n<li>Use swish activation function instead of ReLU to prevent ‘dead neuron’ and smooth the gradient</li>\n<li>Batch Normalisation and Dropout are used for MLP</li>\n<li>Use Keras Tuner to find the optimal hyperparameter set</li>\n</ul>\n<p>This notebook follows the ideas presented in my \"Initial Thoughts\" [here][1]. </p>\n<p>Happy Kaggling! <br>\nCheers ^^</p>",
      "rawMarkdown": "# <span class=\"title-section w3-xxlarge\" id=\"codebook\">1st Place of Jane Street 🏆 ➜ Adapted to Crypto 👌</span>\n\n> **TL;DR:** [Here it is](https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto)\n\nHi Guys, \n\nI just finished converting the [1st place winning solution](https://www.kaggle.com/gogo827jz/jane-street-supervised-autoencoder-mlp) of Yirun Zhang from [Jane Street](https://www.kaggle.com/c/jane-street-market-prediction) market prediction competition earlier this year. \n\nThe notebook is [right here](https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto).\n\nIt is a simple starter notebook using purged group time series. There are many configuration variables to allow you to experiment. Use either GPU or TPU. You can control which years are loaded, which neural networks are used, and whether to use feature engineering. \n\nYou can experiment with different data preprocessing, model architecture, loss, optimizers, and learning rate schedules. The extra datasets contain the full history of the assets at the same format of the competition, so you can input that into your model too.\n\n____ \n\n**The solution: Encoder + MLP**:\n\n![](https://i.ibb.co/ggGrsV5/download.png)\n\nThe main idea of using an encoder is the denoise the data. After many attempts at using an unsupervised autoencoder, the choice landed on a bottleneck encoder as this will preserve the intra-feature relations.\n\n**Main Ideas:**\n\nIn Jane street competition, Yirun has used a supervised autoencoder MLP approach and his teammates use XGBoost. Their final submission is a simple blend of these two models. Here, We explain Yirun's approach in detail.\n\nThe supervised autoencoder approach was initially proposed in [Bottleneck encoder + MLP + Keras Tuner](https://www.kaggle.com/aimind/bottleneck-encoder-mlp-keras-tuner-8601c5) and was adapted to this competition [here](https://www.kaggle.com/yamqwe/bottleneck-encoder-mlp-keras-tuner), where one supervised autoencoder is trained separately before cross-validation (CV) split. Yirun have realized that this training may cause label leakage because the autoencoder has seen part of the data in the validation set in each CV split and it can generate label-leakage features to overfit. So, his approach was to train the supervised autoencoder along with MLP in one model in each CV split. The training processes and explanations are given in the notebook and the following statements.\n\n**The Model:**\n\n- Use autoencoder to create new features, concatenating with the original features as the input to the downstream MLP model\n- Train autoencoder and MLP together in each CV split to prevent data leakage\n- Add target information to autoencoder (supervised learning) to force it to generate more relevant features, and to create a shortcut for backpropagation of gradient\n- Add Gaussian noise layer before encoder for data augmentation and to prevent overfitting\n- Use swish activation function instead of ReLU to prevent ‘dead neuron’ and smooth the gradient\n- Batch Normalisation and Dropout are used for MLP\n- Use Keras Tuner to find the optimal hyperparameter set\n\nThis notebook follows the ideas presented in my \"Initial Thoughts\" [here][1]. \n\nHappy Kaggling! \nCheers ^^",
      "votes": null
    },
    {
      "id": "1578738",
      "postDate": "11/11/2021 09:54:56",
      "content": "<p>thx. I would like to try try.</p>",
      "rawMarkdown": "thx. I would like to try try.",
      "votes": null
    },
    {
      "id": "1581287",
      "postDate": "11/13/2021 15:34:49",
      "content": "<p>got a wierd  PB  -0.000</p>",
      "rawMarkdown": "got a wierd  PB  -0.000",
      "votes": null
    },
    {
      "id": "2011889",
      "postDate": "10/31/2022 23:01:11",
      "content": "<p>This <a href=\"https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto\" target=\"_blank\">link</a> is dead.</p>",
      "rawMarkdown": "This [link](https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto) is dead.",
      "votes": null
    },
    {
      "id": "2073042",
      "postDate": "12/22/2022 16:06:15",
      "content": "<p>HI, did you find the link ? also interested</p>",
      "rawMarkdown": "HI, did you find the link ? also interested",
      "votes": null
    },
    {
      "id": "2183027",
      "postDate": "03/15/2023 12:39:51",
      "content": "<p>I have copied it here from the original notebook. <br>\n <a href=\"https://www.kaggle.com/code/gabrielet/1st-place-of-jane-street-adapted-to-cr-e71493/edit\" target=\"_blank\">https://www.kaggle.com/code/gabrielet/1st-place-of-jane-street-adapted-to-cr-e71493/edit</a></p>",
      "rawMarkdown": "I have copied it here from the original notebook. \n https://www.kaggle.com/code/gabrielet/1st-place-of-jane-street-adapted-to-cr-e71493/edit",
      "votes": null
    },
    {
      "id": "2183028",
      "postDate": "03/15/2023 12:40:11",
      "content": "<p>However, I think there might be a problem in the way the model is fitted, in particular for the outputs. </p>\n<p>The fit below is defined using x_train and y_train for labels:<br>\nhistory = model.fit( x_train, y_train, epochs = EPOCHS[fold], callbacks = [sv,get_lr_callback(BATCH_SIZES[fold])], validation_data = (x_val, y_val), verbose=VERBOSE )</p>\n<p>Whereas the model outputs have [decoder, out_ae, out] <br>\nmodel = tf.keras.models.Model(inputs = inp, outputs = [decoder, out_ae, out]). </p>\n<p>In the original model of Yirun Zhang and coworkers for the winning solution on the Jane Street challenge the model is fitted as one would expect returning 3 outputs: [X[tr], y[tr], y[tr]]</p>\n<p>history = model.fit(X[tr], [X[tr], y[tr], y[tr]], validation_data = (X[te], [X[te], y[te], y[te]]), </p>\n<p>See:<br>\n<a href=\"https://github.com/MingjieWang0606/Kaggle-Jane-Street-AE-MLP-xgb-TOP1/blob/main/current-1th-jane-street-ae-mlp-xgb.ipynb\" target=\"_blank\">https://github.com/MingjieWang0606/Kaggle-Jane-Street-AE-MLP-xgb-TOP1/blob/main/current-1th-jane-street-ae-mlp-xgb.ipynb</a></p>",
      "rawMarkdown": "However, I think there might be a problem in the way the model is fitted, in particular for the outputs. \n\nThe fit below is defined using x_train and y_train for labels:\nhistory = model.fit( x_train, y_train, epochs = EPOCHS[fold], callbacks = [sv,get_lr_callback(BATCH_SIZES[fold])], validation_data = (x_val, y_val), verbose=VERBOSE )\n\nWhereas the model outputs have [decoder, out_ae, out] \nmodel = tf.keras.models.Model(inputs = inp, outputs = [decoder, out_ae, out]). \n\nIn the original model of Yirun Zhang and coworkers for the winning solution on the Jane Street challenge the model is fitted as one would expect returning 3 outputs: [X[tr], y[tr], y[tr]]\n\nhistory = model.fit(X[tr], [X[tr], y[tr], y[tr]], validation_data = (X[te], [X[te], y[te], y[te]]), \n\nSee:\nhttps://github.com/MingjieWang0606/Kaggle-Jane-Street-AE-MLP-xgb-TOP1/blob/main/current-1th-jane-street-ae-mlp-xgb.ipynb",
      "votes": null
    },
    {
      "id": "2477644",
      "postDate": "10/11/2023 13:16:12",
      "content": "<p>Hi, i think the link is dead too…. but maybe i mistake.   Do you still work on the model ?  i look for partnership to investigate furthermore predicting crypto. I have good dataset with 3K features,  feel free to contact me</p>",
      "rawMarkdown": "Hi, i think the link is dead too.... but maybe i mistake.   Do you still work on the model ?  i look for partnership to investigate furthermore predicting crypto. I have good dataset with 3K features,  feel free to contact me",
      "votes": null
    },
    {
      "id": "2479381",
      "postDate": "10/12/2023 15:35:22",
      "content": "<p>Hi, we are building a team to go further on crypto prediction based on this notebook and correlation between cryptos, who want to join  (only expert on ML/DL with value added please)</p>",
      "rawMarkdown": "Hi, we are building a team to go further on crypto prediction based on this notebook and correlation between cryptos, who want to join  (only expert on ML/DL with value added please)",
      "votes": null
    },
    {
      "id": "2560653",
      "postDate": "12/13/2023 21:31:33",
      "content": "<p>hello my mail <a href=\"mailto:avtosubaru25@gmail.com\">avtosubaru25@gmail.com</a></p>",
      "rawMarkdown": "hello my mail avtosubaru25@gmail.com",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1578738,
      "author_name": "dragonzhang",
      "author_url": "",
      "post_date": "11/11/2021 09:54:56",
      "content": "<p>thx. I would like to try try.</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 1581287,
      "author_name": "dragonzhang",
      "author_url": "",
      "post_date": "11/13/2021 15:34:49",
      "content": "<p>got a wierd  PB  -0.000</p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2011889,
      "author_name": "eugeniuz",
      "author_url": "",
      "post_date": "10/31/2022 23:01:11",
      "content": "<p>This <a href=\"https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto\" target=\"_blank\">link</a> is dead.</p>",
      "votes": null,
      "replies": [
        {
          "id": 2073042,
          "author_name": "sylvain92",
          "author_url": "",
          "post_date": "12/22/2022 16:06:15",
          "content": "<p>HI, did you find the link ? also interested</p>",
          "votes": null,
          "replies": [
            {
              "id": 2183027,
              "author_name": "gabrielet",
              "author_url": "",
              "post_date": "03/15/2023 12:39:51",
              "content": "<p>I have copied it here from the original notebook. <br>\n <a href=\"https://www.kaggle.com/code/gabrielet/1st-place-of-jane-street-adapted-to-cr-e71493/edit\" target=\"_blank\">https://www.kaggle.com/code/gabrielet/1st-place-of-jane-street-adapted-to-cr-e71493/edit</a></p>",
              "votes": null,
              "replies": [
                {
                  "id": 2183028,
                  "author_name": "gabrielet",
                  "author_url": "",
                  "post_date": "03/15/2023 12:40:11",
                  "content": "<p>However, I think there might be a problem in the way the model is fitted, in particular for the outputs. </p>\n<p>The fit below is defined using x_train and y_train for labels:<br>\nhistory = model.fit( x_train, y_train, epochs = EPOCHS[fold], callbacks = [sv,get_lr_callback(BATCH_SIZES[fold])], validation_data = (x_val, y_val), verbose=VERBOSE )</p>\n<p>Whereas the model outputs have [decoder, out_ae, out] <br>\nmodel = tf.keras.models.Model(inputs = inp, outputs = [decoder, out_ae, out]). </p>\n<p>In the original model of Yirun Zhang and coworkers for the winning solution on the Jane Street challenge the model is fitted as one would expect returning 3 outputs: [X[tr], y[tr], y[tr]]</p>\n<p>history = model.fit(X[tr], [X[tr], y[tr], y[tr]], validation_data = (X[te], [X[te], y[te], y[te]]), </p>\n<p>See:<br>\n<a href=\"https://github.com/MingjieWang0606/Kaggle-Jane-Street-AE-MLP-xgb-TOP1/blob/main/current-1th-jane-street-ae-mlp-xgb.ipynb\" target=\"_blank\">https://github.com/MingjieWang0606/Kaggle-Jane-Street-AE-MLP-xgb-TOP1/blob/main/current-1th-jane-street-ae-mlp-xgb.ipynb</a></p>",
                  "votes": null,
                  "replies": []
                },
                {
                  "id": 2477644,
                  "author_name": "sylvain92",
                  "author_url": "",
                  "post_date": "10/11/2023 13:16:12",
                  "content": "<p>Hi, i think the link is dead too…. but maybe i mistake.   Do you still work on the model ?  i look for partnership to investigate furthermore predicting crypto. I have good dataset with 3K features,  feel free to contact me</p>",
                  "votes": null,
                  "replies": []
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "id": 2479381,
      "author_name": "sylvain92",
      "author_url": "",
      "post_date": "10/12/2023 15:35:22",
      "content": "<p>Hi, we are building a team to go further on crypto prediction based on this notebook and correlation between cryptos, who want to join  (only expert on ML/DL with value added please)</p>",
      "votes": null,
      "replies": [
        {
          "id": 2560653,
          "author_name": "dmitriy777",
          "author_url": "",
          "post_date": "12/13/2023 21:31:33",
          "content": "<p>hello my mail <a href=\"mailto:avtosubaru25@gmail.com\">avtosubaru25@gmail.com</a></p>",
          "votes": null,
          "replies": []
        }
      ]
    }
  ],
  "raw_markdown_by_id": {
    "1577600": "# <span class=\"title-section w3-xxlarge\" id=\"codebook\">1st Place of Jane Street 🏆 ➜ Adapted to Crypto 👌</span>\n\n> **TL;DR:** [Here it is](https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto)\n\nHi Guys, \n\nI just finished converting the [1st place winning solution](https://www.kaggle.com/gogo827jz/jane-street-supervised-autoencoder-mlp) of Yirun Zhang from [Jane Street](https://www.kaggle.com/c/jane-street-market-prediction) market prediction competition earlier this year. \n\nThe notebook is [right here](https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto).\n\nIt is a simple starter notebook using purged group time series. There are many configuration variables to allow you to experiment. Use either GPU or TPU. You can control which years are loaded, which neural networks are used, and whether to use feature engineering. \n\nYou can experiment with different data preprocessing, model architecture, loss, optimizers, and learning rate schedules. The extra datasets contain the full history of the assets at the same format of the competition, so you can input that into your model too.\n\n____ \n\n**The solution: Encoder + MLP**:\n\n![](https://i.ibb.co/ggGrsV5/download.png)\n\nThe main idea of using an encoder is the denoise the data. After many attempts at using an unsupervised autoencoder, the choice landed on a bottleneck encoder as this will preserve the intra-feature relations.\n\n**Main Ideas:**\n\nIn Jane street competition, Yirun has used a supervised autoencoder MLP approach and his teammates use XGBoost. Their final submission is a simple blend of these two models. Here, We explain Yirun's approach in detail.\n\nThe supervised autoencoder approach was initially proposed in [Bottleneck encoder + MLP + Keras Tuner](https://www.kaggle.com/aimind/bottleneck-encoder-mlp-keras-tuner-8601c5) and was adapted to this competition [here](https://www.kaggle.com/yamqwe/bottleneck-encoder-mlp-keras-tuner), where one supervised autoencoder is trained separately before cross-validation (CV) split. Yirun have realized that this training may cause label leakage because the autoencoder has seen part of the data in the validation set in each CV split and it can generate label-leakage features to overfit. So, his approach was to train the supervised autoencoder along with MLP in one model in each CV split. The training processes and explanations are given in the notebook and the following statements.\n\n**The Model:**\n\n- Use autoencoder to create new features, concatenating with the original features as the input to the downstream MLP model\n- Train autoencoder and MLP together in each CV split to prevent data leakage\n- Add target information to autoencoder (supervised learning) to force it to generate more relevant features, and to create a shortcut for backpropagation of gradient\n- Add Gaussian noise layer before encoder for data augmentation and to prevent overfitting\n- Use swish activation function instead of ReLU to prevent ‘dead neuron’ and smooth the gradient\n- Batch Normalisation and Dropout are used for MLP\n- Use Keras Tuner to find the optimal hyperparameter set\n\nThis notebook follows the ideas presented in my \"Initial Thoughts\" [here][1]. \n\nHappy Kaggling! \nCheers ^^",
    "1578738": "thx. I would like to try try.",
    "1581287": "got a wierd  PB  -0.000",
    "2011889": "This [link](https://www.kaggle.com/yamqwe/1st-place-of-jane-street-adapted-to-crypto) is dead.",
    "2073042": "HI, did you find the link ? also interested",
    "2183027": "I have copied it here from the original notebook. \n https://www.kaggle.com/code/gabrielet/1st-place-of-jane-street-adapted-to-cr-e71493/edit",
    "2183028": "However, I think there might be a problem in the way the model is fitted, in particular for the outputs. \n\nThe fit below is defined using x_train and y_train for labels:\nhistory = model.fit( x_train, y_train, epochs = EPOCHS[fold], callbacks = [sv,get_lr_callback(BATCH_SIZES[fold])], validation_data = (x_val, y_val), verbose=VERBOSE )\n\nWhereas the model outputs have [decoder, out_ae, out] \nmodel = tf.keras.models.Model(inputs = inp, outputs = [decoder, out_ae, out]). \n\nIn the original model of Yirun Zhang and coworkers for the winning solution on the Jane Street challenge the model is fitted as one would expect returning 3 outputs: [X[tr], y[tr], y[tr]]\n\nhistory = model.fit(X[tr], [X[tr], y[tr], y[tr]], validation_data = (X[te], [X[te], y[te], y[te]]), \n\nSee:\nhttps://github.com/MingjieWang0606/Kaggle-Jane-Street-AE-MLP-xgb-TOP1/blob/main/current-1th-jane-street-ae-mlp-xgb.ipynb",
    "2477644": "Hi, i think the link is dead too.... but maybe i mistake.   Do you still work on the model ?  i look for partnership to investigate furthermore predicting crypto. I have good dataset with 3K features,  feel free to contact me",
    "2479381": "Hi, we are building a team to go further on crypto prediction based on this notebook and correlation between cryptos, who want to join  (only expert on ML/DL with value added please)",
    "2560653": "hello my mail avtosubaru25@gmail.com"
  },
  "source": "meta"
}