{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# importation of libraries\n#data analysis\nimport pandas as pd\nimport numpy as np \nfrom datetime import datetime\n#data visualization\nfrom matplotlib import pyplot as plt\nimport seaborn as sns\nimport plotly.express as px\nimport plotly.graph_objects as go\nfrom plotly.subplots import make_subplots as ms \n# feature generation & modeling\nfrom sklearn.feature_selection import mutual_info_regression\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.linear_model import LinearRegression\nfrom sklearn.linear_model import LogisticRegression\nfrom sklearn.preprocessing import PolynomialFeatures,OneHotEncoder,LabelEncoder,StandardScaler,MinMaxScaler\nfrom sklearn.neighbors import KNeighborsRegressor\nfrom sklearn.ensemble import RandomForestRegressor\nfrom sklearn.tree import DecisionTreeRegressor\nfrom sklearn.svm import SVR\nfrom sklearn.metrics import mean_absolute_error,mean_squared_error,r2_score\nfrom xgboost import XGBClassifier,XGBRegressor\nfrom lightgbm import LGBMRegressor\n# unsupervised machine learning \nfrom sklearn.cluster import KMeans","metadata":{"execution":{"iopub.status.busy":"2022-09-07T18:44:29.798906Z","iopub.execute_input":"2022-09-07T18:44:29.799751Z","iopub.status.idle":"2022-09-07T18:44:34.177444Z","shell.execute_reply.started":"2022-09-07T18:44:29.799642Z","shell.execute_reply":"2022-09-07T18:44:34.17653Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train_csv=pd.read_csv(\"../input/g-research-crypto-forecasting/train.csv\")","metadata":{"execution":{"iopub.status.busy":"2022-09-07T18:44:34.179313Z","iopub.execute_input":"2022-09-07T18:44:34.17963Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_csv=pd.read_csv(\"../input/g-research-crypto-forecasting/example_test.csv\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"asset_details_csv=pd.read_csv(\"../input/g-research-crypto-forecasting/asset_details.csv\")\nsupplemental_train_csv=pd.read_csv(\"../input/g-research-crypto-forecasting/supplemental_train.csv\")","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train=pd.concat([train_csv,supplemental_train_csv])","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"deacresing memory usage","metadata":{}},{"cell_type":"code","source":"def memory_reducer(df):\n  \n    start_mem = df.memory_usage().sum() / 1024**2\n    print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))\n    \n    for col in df.columns:\n        col_type = df[col].dtype\n        \n        if col_type != object:\n            c_min = df[col].min()\n            c_max = df[col].max()\n            if str(col_type)[:3] == 'int':\n                if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n                    df[col] = df[col].astype(np.int8)\n                elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n                    df[col] = df[col].astype(np.int16)\n                elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n                    df[col] = df[col].astype(np.int32)\n                elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n                    df[col] = df[col].astype(np.int64)  \n            else:\n                if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:\n                    df[col] = df[col].astype(np.float16)\n                elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n                    df[col] = df[col].astype(np.float32)\n                else:\n                    df[col] = df[col].astype(np.float64)\n#         else:\n#             df[col] = df[col].astype('category')\n\n    df[\"Count\"] = df[\"Count\"].astype(np.int16)\n\n    end_mem = df.memory_usage().sum() / 1024**2\n    \n    print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))\n    print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))\n     \n    return df\n\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"memory_reducer(train)\nmemory_reducer(test_csv)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# EDA and features generations","metadata":{}},{"cell_type":"code","source":"#asset_details_csv.transpose()\n# treating eache currency by it self \ndef get_feats(df):\n    df['upper_shadow'] = df['High'] - np.maximum(df['Close'], df['Open'])\n    df['lower_shadow'] = np.minimum(df['Close'], df['Open']) - df['Low']\n    \n    # average trading volume\n    df['avg_volume'] = df['Volume'] / df['Count']\n    # PCA \n    # average price\n    df['avg_price'] = (df['Open'] + df['High'] + df['Low'] + df['Close']) / 4\n    \n    # difference between open and close price\n    df.rename(columns = {'Diff': 'diff_open_close'})\n    \n    # moving average features - short term and long term\n    df['ma_20'] = df['Close'].rolling(window = 20, min_periods = 1).mean()\n    df['ma_120'] = df['Close'].rolling(window = 120, min_periods = 1).mean()\n    \n    # lagged features\n    lags_ = [5, 20, 60, 120]\n    for lag in lags_:\n        df['lag_Count' + str(lag)] = df['Count'].shift(lag)\n    lags1_ = [5, 20, 60, 120]\n    for lag1 in lags_:\n        df['lag_Volume' + str(lag1)] = df['Volume'].shift(lag)\n        \n    df = df.fillna(0)\n    \n    return df","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Bitcoin=train[train[\"Asset_ID\"]==1].drop([\"Asset_ID\"],axis=True)\nBitcoin_Cash=train[train[\"Asset_ID\"]==2].drop([\"Asset_ID\"],axis=True)\nBinance_Coin=train[train[\"Asset_ID\"]==0].drop([\"Asset_ID\"],axis=True)\nEOS_IO=train[train[\"Asset_ID\"]==5].drop([\"Asset_ID\"],axis=True)\nEthereum_Classic=train[train[\"Asset_ID\"]==7].drop([\"Asset_ID\"],axis=True)\nEthereum=train[train[\"Asset_ID\"]==6].drop([\"Asset_ID\"],axis=True)\nLitecoin=train[train[\"Asset_ID\"]==9].drop([\"Asset_ID\"],axis=True)\nMonero=train[train[\"Asset_ID\"]==11].drop([\"Asset_ID\"],axis=True)\nTRON=train[train[\"Asset_ID\"]==13].drop([\"Asset_ID\"],axis=True)\nStellar=train[train[\"Asset_ID\"]==12].drop([\"Asset_ID\"],axis=True)\nCardano=train[train[\"Asset_ID\"]==3].drop([\"Asset_ID\"],axis=True)\nIOTA=train[train[\"Asset_ID\"]==8].drop([\"Asset_ID\"],axis=True)\nDogecoin=train[train[\"Asset_ID\"]==4].drop([\"Asset_ID\"],axis=True)\nMaker=train[train[\"Asset_ID\"]==10].drop([\"Asset_ID\"],axis=True)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.dropna(inplace=True)\ntrain.isnull().sum()\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scaler=MinMaxScaler()\nscaled_Ethereum=scaler.fit_transform(Ethereum.drop([\"Target\"],axis=True))\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"train.dropna()","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"fig, axes=plt.subplots(1,1,figsize=(10,10))\nsns.scatterplot(data=Bitcoin,x=\"Count\",y=\"Target\",hue=\"Clusters\")\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"get_feats(Ethereum)\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"Ethereum[\"Target\"]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"scaled_Ethereum=pd.DataFrame(scaled_Ethereum,columns=Ethereum.drop([\"Target\",\"Asset_ID\"],axis=True).columns)\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from sklearn.decomposition import PCA\npca=PCA()\npca=pca.fit_transform(scaled_Ethereum)\npca=pd.DataFrame(pca,columns=[f\"PCA{i+1}\"for i in range(pca.shape[1])])\nEthereum.dropna(inplace=True)\ntrain_Ethereum=Ethereum.join(pca)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x=train_Ethereum.drop([\"Target\"],axis=1)\ny=Ethereum[\"Target\"]\nx_train=x.iloc[0:round(len(x)*(80/100)),:]\nx_val=x.iloc[round(len(x)*(80/100)):,:]\ny_train=y.iloc[0:round(len(x)*(80/100))]\ny_val=y.iloc[round(len(x)*(80/100)):]","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"light=LGBMRegressor(n_estimators=(50))\nlight.fit(x_train,y_train)\ny_predict=light.predict(x_val)\nr2_score(y_val,y_predict)","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}