2025-02-13 23:26:33 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Начало лабы №7"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Загрузка даанных"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 15,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Index(['Date', 'Open', 'High', 'Low', 'Close', 'Adj Close', 'Volume',\n",
" 'SP_open', 'SP_high', 'SP_low', 'SP_close', 'SP_Ajclose', 'SP_volume',\n",
" 'DJ_open', 'DJ_high', 'DJ_low', 'DJ_close', 'DJ_Ajclose', 'DJ_volume',\n",
" 'EG_open', 'EG_high', 'EG_low', 'EG_close', 'EG_Ajclose', 'EG_volume',\n",
" 'EU_Price', 'EU_open', 'EU_high', 'EU_low', 'EU_Trend', 'OF_Price',\n",
" 'OF_Open', 'OF_High', 'OF_Low', 'OF_Volume', 'OF_Trend', 'OS_Price',\n",
" 'OS_Open', 'OS_High', 'OS_Low', 'OS_Trend', 'SF_Price', 'SF_Open',\n",
" 'SF_High', 'SF_Low', 'SF_Volume', 'SF_Trend', 'USB_Price', 'USB_Open',\n",
" 'USB_High', 'USB_Low', 'USB_Trend', 'PLT_Price', 'PLT_Open', 'PLT_High',\n",
" 'PLT_Low', 'PLT_Trend', 'PLD_Price', 'PLD_Open', 'PLD_High', 'PLD_Low',\n",
" 'PLD_Trend', 'RHO_PRICE', 'USDI_Price', 'USDI_Open', 'USDI_High',\n",
" 'USDI_Low', 'USDI_Volume', 'USDI_Trend', 'GDX_Open', 'GDX_High',\n",
" 'GDX_Low', 'GDX_Close', 'GDX_Adj Close', 'GDX_Volume', 'USO_Open',\n",
" 'USO_High', 'USO_Low', 'USO_Close', 'USO_Adj Close', 'USO_Volume'],\n",
" dtype='object')\n"
]
},
{
"data": {
"application/vnd.microsoft.datawrangler.viewer.v0+json": {
"columns": [
{
"name": "index",
"rawType": "int64",
"type": "integer"
},
{
"name": "Date",
"rawType": "object",
"type": "string"
},
{
"name": "Open",
"rawType": "float64",
"type": "float"
},
{
"name": "High",
"rawType": "float64",
"type": "float"
},
{
"name": "Low",
"rawType": "float64",
"type": "float"
},
{
"name": "Close",
"rawType": "float64",
"type": "float"
},
{
"name": "Adj Close",
"rawType": "float64",
"type": "float"
},
{
"name": "Volume",
"rawType": "int64",
"type": "integer"
},
{
"name": "SP_open",
"rawType": "float64",
"type": "float"
},
{
"name": "SP_high",
"rawType": "float64",
"type": "float"
},
{
"name": "SP_low",
"rawType": "float64",
"type": "float"
},
{
"name": "SP_close",
"rawType": "float64",
"type": "float"
},
{
"name": "SP_Ajclose",
"rawType": "float64",
"type": "float"
},
{
"name": "SP_volume",
"rawType": "int64",
"type": "integer"
},
{
"name": "DJ_open",
"rawType": "float64",
"type": "float"
},
{
"name": "DJ_high",
"rawType": "float64",
"type": "float"
},
{
"name": "DJ_low",
"rawType": "float64",
"type": "float"
},
{
"name": "DJ_close",
"rawType": "float64",
"type": "float"
},
{
"name": "DJ_Ajclose",
"rawType": "float64",
"type": "float"
},
{
"name": "DJ_volume",
"rawType": "int64",
"type": "integer"
},
{
"name": "EG_open",
"rawType": "float64",
"type": "float"
},
{
"name": "EG_high",
"rawType": "float64",
"type": "float"
},
{
"name": "EG_low",
"rawType": "float64",
"type": "float"
},
{
"name": "EG_close",
"rawType": "float64",
"type": "float"
},
{
"name": "EG_Ajclose",
"rawType": "float64",
"type": "float"
},
{
"name": "EG_volume",
"rawType": "int64",
"type": "integer"
},
{
"name": "EU_Price",
"rawType": "float64",
"type": "float"
},
{
"name": "EU_open",
"rawType": "float64",
"type": "float"
},
{
"name": "EU_high",
"rawType": "float64",
"type": "float"
},
{
"name": "EU_low",
"rawType": "float64",
"type": "float"
},
{
"name": "EU_Trend",
"rawType": "int64",
"type": "integer"
},
{
"name": "OF_Price",
"rawType": "float64",
"type": "float"
},
{
"name": "OF_Open",
"rawType": "float64",
"type": "float"
},
{
"name": "OF_High",
"rawType": "float64",
"type": "float"
},
{
"name": "OF_Low",
"rawType": "float64",
"type": "float"
},
{
"name": "OF_Volume",
"rawType": "int64",
"type": "integer"
},
{
"name": "OF_Trend",
"rawType": "int64",
"type": "integer"
},
{
"name": "OS_Price",
"rawType": "float64",
"type": "float"
},
{
"name": "OS_Open",
"rawType": "float64",
"type": "float"
},
{
"name": "OS_High",
"rawType": "float64",
"type": "float"
},
{
"name": "OS_Low",
"rawType": "float64",
"type": "float"
},
{
"name": "OS_Trend",
"rawType": "int64",
"type": "integer"
},
{
"name": "SF_Price",
"rawType": "int64",
"type": "integer"
},
{
"name": "SF_Open",
"rawType": "int64",
"type": "integer"
},
{
"name": "SF_High",
"rawType": "int64",
"type": "integer"
},
{
"name": "SF_Low",
"rawType": "int64",
"type": "integer"
},
{
"name": "SF_Volume",
"rawType": "int64",
"type": "integer"
},
{
"name": "SF_Trend",
"rawType": "int64",
"type": "integer"
},
{
"name": "USB_Price",
"rawType": "float64",
"type": "float"
},
{
"name": "USB_Open",
"rawType": "float64",
"type": "float"
},
{
"name": "USB_High",
"rawType": "float64",
"type": "float"
},
{
"name": "USB_Low",
"rawType": "float64",
"type": "float"
},
{
"name": "USB_Trend",
"rawType": "int64",
"type": "integer"
},
{
"name": "PLT_Price",
"rawType": "float64",
"type": "float"
},
{
"name": "PLT_Open",
"rawType": "float64",
"type": "float"
},
{
"name": "PLT_High",
"rawType": "float64",
"type": "float"
},
{
"name": "PLT_Low",
"rawType": "float64",
"type": "float"
},
{
"name": "PLT_Trend",
"rawType": "int64",
"type": "integer"
},
{
"name": "PLD_Price",
"rawType": "float64",
"type": "float"
},
{
"name": "PLD_Open",
"rawType": "float64",
"type": "float"
},
{
"name": "PLD_High",
"rawType": "float64",
"type": "float"
},
{
"name": "PLD_Low",
"rawType": "float64",
"type": "float"
},
{
"name": "PLD_Trend",
"rawType": "int64",
"type": "integer"
},
{
"name": "RHO_PRICE",
"rawType": "int64",
"type": "integer"
},
{
"name": "USDI_Price",
"rawType": "float64",
"type": "float"
},
{
"name": "USDI_Open",
"rawType": "float64",
"type": "float"
},
{
"name": "USDI_High",
"rawType": "float64",
"type": "float"
},
{
"name": "USDI_Low",
"rawType": "float64",
"type": "float"
},
{
"name": "USDI_Volume",
"rawType": "int64",
"type": "integer"
},
{
"name": "USDI_Trend",
"rawType": "int64",
"type": "integer"
},
{
"name": "GDX_Open",
"rawType": "float64",
"type": "float"
},
{
"name": "GDX_High",
"rawType": "float64",
"type": "float"
},
{
"name": "GDX_Low",
"rawType": "float64",
"type": "float"
},
{
"name": "GDX_Close",
"rawType": "float64",
"type": "float"
},
{
"name": "GDX_Adj Close",
"rawType": "float64",
"type": "float"
},
{
"name": "GDX_Volume",
"rawType": "int64",
"type": "integer"
},
{
"name": "USO_Open",
"rawType": "float64",
"type": "float"
},
{
"name": "USO_High",
"rawType": "float64",
"type": "float"
},
{
"name": "USO_Low",
"rawType": "float64",
"type": "float"
},
{
"name": "USO_Close",
"rawType": "float64",
"type": "float"
},
{
"name": "USO_Adj Close",
"rawType": "float64",
"type": "float"
},
{
"name": "USO_Volume",
"rawType": "int64",
"type": "integer"
}
],
"conversionMethod": "pd.DataFrame",
2025-02-15 12:11:09 +04:00
"ref": "2086a340-ae3b-4473-80ac-8c9384ddefee",
2025-02-13 23:26:33 +04:00
"rows": [
[
"0",
"2011-12-15",
"154.740005",
"154.949997",
"151.71000700000005",
"152.330002",
"152.330002",
"21521900",
"123.029999",
"123.199997",
"121.989998",
"122.18",
"105.44123799999998",
"199109200",
"11825.29004",
"11967.83984",
"11825.21973",
"11868.80957",
"11868.80957",
"136930000",
"74.550003",
"76.150002",
"72.150002",
"72.900002",
"70.43175500000002",
"787900",
"1.3018",
"1.2982",
"1.3051",
"1.2957",
"1",
"105.09",
"104.88",
"106.5",
"104.88",
"14330",
"1",
"93.42",
"94.91",
"96.0",
"93.33",
"0",
"53604",
"54248",
"54248",
"52316",
"119440",
"1",
"1.911",
"1.911",
"1.911",
"1.911",
"1",
"1414.65",
"1420.3",
"1423.35",
"1376.85",
"0",
"618.85",
"614.7",
"615.0",
"614.6",
"1",
"1425",
"80.34100000000002",
"80.565",
"80.63",
"80.13",
"22850",
"0",
"53.009998",
"53.139999",
"51.57",
"51.68",
"48.973877",
"20605600",
"36.900002",
"36.939999",
"36.049999",
"36.130001",
"36.130001",
"12616700"
],
[
"1",
"2011-12-16",
"154.309998",
"155.369995",
"153.899994",
"155.229996",
"155.229996",
"18124300",
"122.230003",
"122.949997",
"121.300003",
"121.589996",
"105.597549",
"220481400",
"11870.25",
"11968.17969",
"11819.30957",
"11866.38965",
"11866.38965",
"389520000",
"73.599998",
"75.099998",
"73.349998",
"74.900002",
"72.364037",
"896600",
"1.3035",
"1.3019999999999998",
"1.3087",
"1.2997",
"1",
"103.35",
"103.51",
"104.56",
"102.46",
"140080",
"0",
"93.79",
"93.43",
"94.8",
"92.53",
"1",
"53458",
"53650",
"54030",
"52890",
"65390",
"0",
"1.851",
"1.851",
"1.851",
"1.851",
"0",
"1420.25",
"1414.75",
"1431.75",
"1400.7",
"1",
"623.65",
"622.6",
"623.45",
"622.3",
"1",
"1400",
"80.249",
"80.175",
"80.395",
"79.935",
"13150",
"0",
"52.5",
"53.18",
"52.040001",
"52.68",
"49.921513",
"16285400",
"36.18",
"36.5",
"35.73",
"36.27",
"36.27",
"12578800"
],
[
"2",
"2011-12-19",
"155.479996",
"155.860001",
"154.360001",
"154.869995",
"154.869995",
"12547200",
"122.059998",
"122.32",
"120.029999",
"120.290001",
"104.468536",
"183903000",
"11866.54004",
"11925.87988",
"11735.19043",
"11766.25977",
"11766.25977",
"135170000",
"69.099998",
"69.800003",
"64.199997",
"64.699997",
"62.509384",
"2096700",
"1.2995",
"1.3043",
"1.3044",
"1.2981",
"0",
"103.64",
"103.63",
"104.57",
"102.37",
"147880",
"1",
"94.09",
"93.77",
"94.43",
"92.55",
"1",
"52961",
"53400",
"53400",
"52544",
"67280",
"0",
"1.81",
"1.81",
"1.81",
"1.81",
"0",
"1411.1",
"1422.65",
"1427.6",
"1404.6",
"0",
"608.8",
"626.0",
"630.0",
"608.6",
"0",
"1400",
"80.207",
"80.3",
"80.47",
"80.125",
"970",
"0",
"52.490002",
"52.549999",
"51.029999",
"51.169998",
"48.490578",
"15120200",
"36.389999",
"36.450001",
"35.93",
"36.200001",
"36.200001",
"7418200"
],
[
"3",
"2011-12-20",
"156.820007",
"157.429993",
"156.580002",
"156.979996",
"156.979996",
"9136300",
"122.18",
"124.139999",
"120.370003",
"123.93",
"107.629784",
"225418100",
"11769.20996",
"12117.12988",
"11768.83008",
"12103.58008",
"12103.58008",
"165180000",
"66.449997",
"68.099998",
"66.0",
"67.0",
"64.731514",
"875300",
"1.3079",
"1.3003",
"1.3133",
"1.2994",
"1",
"106.73",
"104.3",
"107.27",
"103.91",
"170240",
"1",
"95.55",
"96.39",
"99.7",
"96.39",
"1",
"53487",
"52795",
"53575",
"52595",
"55130",
"1",
"1.927",
"1.927",
"1.927",
"1.927",
"1",
"1434.75",
"1408.95",
"1436.55",
"1408.15",
"1",
"626.65",
"622.45",
"622.45",
"622.45",
"1",
"1400",
"80.273",
"80.89",
"80.94",
"80.035",
"22950",
"1",
"52.380001",
"53.25",
"52.369999",
"52.990002",
"50.215282",
"11644900",
"37.299999",
"37.610001",
"37.220001",
"37.560001",
"37.560001",
"10041600"
],
[
"4",
"2011-12-21",
"156.979996",
"157.529999",
"156.130005",
"157.160004",
"157.160004",
"11996100",
"123.93",
"124.360001",
"122.75",
"124.169998",
"107.838242",
"194230900",
"12103.58008",
"12119.7002",
"11999.44043",
"12107.74023",
"12107.74023",
"163250000",
"67.099998",
"69.400002",
"66.900002",
"68.5",
"66.180725",
"837600",
"1.3045",
"1.3079",
"1.3197",
"1.3024",
"0",
"107.71",
"107.15",
"108.17",
"106.16",
"145090",
"1",
"99.01",
"97.54",
"99.26",
"96.81",
"1",
"53148",
"53519",
"54184",
"52937",
"75950",
"0",
"1.97",
"1.97",
"1.97",
"1.97",
"1",
"1429.05",
"1434.4",
"1453.75",
"1417.65",
"0",
"635.9",
"625.7",
"641.5",
"623.8",
"1",
"1400",
"80.35",
"80.105",
"80.445",
"79.55",
"24140",
"1",
"53.150002",
"53.43",
"52.419998",
"52.959999",
"50.186852",
"8724300",
"37.669998",
"38.240002",
"37.52",
"38.110001",
"38.110001",
"10728000"
]
],
"shape": {
"columns": 81,
"rows": 5
}
},
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Adj Close</th>\n",
" <th>Volume</th>\n",
" <th>SP_open</th>\n",
" <th>SP_high</th>\n",
" <th>SP_low</th>\n",
" <th>...</th>\n",
" <th>GDX_Low</th>\n",
" <th>GDX_Close</th>\n",
" <th>GDX_Adj Close</th>\n",
" <th>GDX_Volume</th>\n",
" <th>USO_Open</th>\n",
" <th>USO_High</th>\n",
" <th>USO_Low</th>\n",
" <th>USO_Close</th>\n",
" <th>USO_Adj Close</th>\n",
" <th>USO_Volume</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2011-12-15</td>\n",
" <td>154.740005</td>\n",
" <td>154.949997</td>\n",
" <td>151.710007</td>\n",
" <td>152.330002</td>\n",
" <td>152.330002</td>\n",
" <td>21521900</td>\n",
" <td>123.029999</td>\n",
" <td>123.199997</td>\n",
" <td>121.989998</td>\n",
" <td>...</td>\n",
" <td>51.570000</td>\n",
" <td>51.680000</td>\n",
" <td>48.973877</td>\n",
" <td>20605600</td>\n",
" <td>36.900002</td>\n",
" <td>36.939999</td>\n",
" <td>36.049999</td>\n",
" <td>36.130001</td>\n",
" <td>36.130001</td>\n",
" <td>12616700</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2011-12-16</td>\n",
" <td>154.309998</td>\n",
" <td>155.369995</td>\n",
" <td>153.899994</td>\n",
" <td>155.229996</td>\n",
" <td>155.229996</td>\n",
" <td>18124300</td>\n",
" <td>122.230003</td>\n",
" <td>122.949997</td>\n",
" <td>121.300003</td>\n",
" <td>...</td>\n",
" <td>52.040001</td>\n",
" <td>52.680000</td>\n",
" <td>49.921513</td>\n",
" <td>16285400</td>\n",
" <td>36.180000</td>\n",
" <td>36.500000</td>\n",
" <td>35.730000</td>\n",
" <td>36.270000</td>\n",
" <td>36.270000</td>\n",
" <td>12578800</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2011-12-19</td>\n",
" <td>155.479996</td>\n",
" <td>155.860001</td>\n",
" <td>154.360001</td>\n",
" <td>154.869995</td>\n",
" <td>154.869995</td>\n",
" <td>12547200</td>\n",
" <td>122.059998</td>\n",
" <td>122.320000</td>\n",
" <td>120.029999</td>\n",
" <td>...</td>\n",
" <td>51.029999</td>\n",
" <td>51.169998</td>\n",
" <td>48.490578</td>\n",
" <td>15120200</td>\n",
" <td>36.389999</td>\n",
" <td>36.450001</td>\n",
" <td>35.930000</td>\n",
" <td>36.200001</td>\n",
" <td>36.200001</td>\n",
" <td>7418200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2011-12-20</td>\n",
" <td>156.820007</td>\n",
" <td>157.429993</td>\n",
" <td>156.580002</td>\n",
" <td>156.979996</td>\n",
" <td>156.979996</td>\n",
" <td>9136300</td>\n",
" <td>122.180000</td>\n",
" <td>124.139999</td>\n",
" <td>120.370003</td>\n",
" <td>...</td>\n",
" <td>52.369999</td>\n",
" <td>52.990002</td>\n",
" <td>50.215282</td>\n",
" <td>11644900</td>\n",
" <td>37.299999</td>\n",
" <td>37.610001</td>\n",
" <td>37.220001</td>\n",
" <td>37.560001</td>\n",
" <td>37.560001</td>\n",
" <td>10041600</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2011-12-21</td>\n",
" <td>156.979996</td>\n",
" <td>157.529999</td>\n",
" <td>156.130005</td>\n",
" <td>157.160004</td>\n",
" <td>157.160004</td>\n",
" <td>11996100</td>\n",
" <td>123.930000</td>\n",
" <td>124.360001</td>\n",
" <td>122.750000</td>\n",
" <td>...</td>\n",
" <td>52.419998</td>\n",
" <td>52.959999</td>\n",
" <td>50.186852</td>\n",
" <td>8724300</td>\n",
" <td>37.669998</td>\n",
" <td>38.240002</td>\n",
" <td>37.520000</td>\n",
" <td>38.110001</td>\n",
" <td>38.110001</td>\n",
" <td>10728000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>5 rows × 81 columns</p>\n",
"</div>"
],
"text/plain": [
" Date Open High Low Close Adj Close \\\n",
"0 2011-12-15 154.740005 154.949997 151.710007 152.330002 152.330002 \n",
"1 2011-12-16 154.309998 155.369995 153.899994 155.229996 155.229996 \n",
"2 2011-12-19 155.479996 155.860001 154.360001 154.869995 154.869995 \n",
"3 2011-12-20 156.820007 157.429993 156.580002 156.979996 156.979996 \n",
"4 2011-12-21 156.979996 157.529999 156.130005 157.160004 157.160004 \n",
"\n",
" Volume SP_open SP_high SP_low ... GDX_Low GDX_Close \\\n",
"0 21521900 123.029999 123.199997 121.989998 ... 51.570000 51.680000 \n",
"1 18124300 122.230003 122.949997 121.300003 ... 52.040001 52.680000 \n",
"2 12547200 122.059998 122.320000 120.029999 ... 51.029999 51.169998 \n",
"3 9136300 122.180000 124.139999 120.370003 ... 52.369999 52.990002 \n",
"4 11996100 123.930000 124.360001 122.750000 ... 52.419998 52.959999 \n",
"\n",
" GDX_Adj Close GDX_Volume USO_Open USO_High USO_Low USO_Close \\\n",
"0 48.973877 20605600 36.900002 36.939999 36.049999 36.130001 \n",
"1 49.921513 16285400 36.180000 36.500000 35.730000 36.270000 \n",
"2 48.490578 15120200 36.389999 36.450001 35.930000 36.200001 \n",
"3 50.215282 11644900 37.299999 37.610001 37.220001 37.560001 \n",
"4 50.186852 8724300 37.669998 38.240002 37.520000 38.110001 \n",
"\n",
" USO_Adj Close USO_Volume \n",
"0 36.130001 12616700 \n",
"1 36.270000 12578800 \n",
"2 36.200001 7418200 \n",
"3 37.560001 10041600 \n",
"4 38.110001 10728000 \n",
"\n",
"[5 rows x 81 columns]"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import pandas as pd\n",
"df = pd.read_csv(\"..//static//csv//FINAL_USO.csv\")\n",
"print(df.columns)\n",
"display(df.head())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Создание лингвистических переменных**\n",
"\n",
"Входные переменные: OF_Price (цены на нефть) и SF_Price (цена на с е р е б р о ) . \\\n",
"Выходная переменная: Adj Close (цена)."
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 16,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from skfuzzy import control as ctrl\n",
"\n",
"\n",
"# Инициализация лингвистических переменных\n",
"oil_price = ctrl.Antecedent(np.arange(df['OF_Price'].min(), df['OF_Price'].max(), 10), \"oil_price\")\n",
"silver_price = ctrl.Antecedent(np.arange(df['SF_Price'].min(), df['SF_Price'].max(), 1000), \"silver_price\")\n",
"adj_close = ctrl.Consequent(np.arange(df['Adj Close'].min(), df['Adj Close'].max(), 10), \"adj_close\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Формирование нечетких переменных для лингвистических переменных и их визуализация**"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": null,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"c:\\Users\\Алина\\AppData\\Local\\Programs\\Python\\Python312\\Lib\\site-packages\\skfuzzy\\control\\fuzzyvariable.py:125: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n",
" fig.show()\n"
]
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
2025-02-15 12:11:09 +04:00
"image/png": "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
2025-02-13 23:26:33 +04:00
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import skfuzzy as fuzz\n",
"\n",
"oil_price['low'] = fuzz.zmf(oil_price.universe, 40, 50)\n",
"oil_price['average'] = fuzz.trapmf(oil_price.universe, [60, 70, 80, 90])\n",
"oil_price['high'] = fuzz.smf(oil_price.universe, 100, 120)\n",
"\n",
"silver_price['low'] = fuzz.zmf(silver_price.universe, 35000, 45000)\n",
"silver_price['average'] = fuzz.trapmf(silver_price.universe, [35000, 45000, 50000, 60000])\n",
"silver_price['high'] = fuzz.smf(silver_price.universe, 50000, 60000)\n",
"\n",
2025-02-15 12:11:09 +04:00
"adj_close['low'] = fuzz.zmf(adj_close.universe,110, 135)\n",
2025-02-13 23:26:33 +04:00
"adj_close['average'] = fuzz.trapmf(adj_close.universe, [135, 145, 155, 165])\n",
"adj_close['high'] = fuzz.smf(adj_close.universe, 160, 170)\n",
"\n",
"oil_price.view()\n",
"silver_price.view()\n",
"adj_close.view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Формирование и визуализация базы нечетких правил**\n"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 18,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(<Figure size 640x480 with 1 Axes>, <Axes: >)"
]
},
2025-02-15 12:11:09 +04:00
"execution_count": 18,
2025-02-13 23:26:33 +04:00
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
2025-02-15 12:11:09 +04:00
"image/png": "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
2025-02-13 23:26:33 +04:00
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"import skfuzzy as fuzz\n",
"from skfuzzy import control as ctrl\n",
"# Нечеткие правила\n",
"rule1 = ctrl.Rule(silver_price[\"low\"] & oil_price[\"low\"], adj_close[\"low\"])\n",
"rule2 = ctrl.Rule(silver_price[\"low\"] & oil_price[\"average\"], adj_close[\"low\"])\n",
"rule3 = ctrl.Rule(silver_price[\"low\"] & oil_price[\"high\"], adj_close[\"low\"])\n",
"rule4 = ctrl.Rule(silver_price[\"average\"] & oil_price[\"low\"], adj_close[\"low\"])\n",
"rule5 = ctrl.Rule(silver_price[\"average\"] & oil_price[\"average\"], adj_close[\"low\"])\n",
"rule6 = ctrl.Rule(silver_price[\"average\"] & oil_price[\"high\"], adj_close[\"low\"])\n",
"rule7 = ctrl.Rule(silver_price[\"high\"] & oil_price[\"low\"], adj_close[\"average\"])\n",
"rule8 = ctrl.Rule(silver_price[\"high\"] & oil_price[\"average\"], adj_close[\"high\"])\n",
"rule9 = ctrl.Rule(silver_price[\"high\"] & oil_price[\"high\"], adj_close[\"high\"])\n",
"rule1.view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Создание нечеткой системы и добавление нечетких правил в базу знаний нечеткой системы**"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 19,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [],
"source": [
"price_ctrl = ctrl.ControlSystem(\n",
" [\n",
" rule1,\n",
" rule2,\n",
" rule3,\n",
" rule4,\n",
" rule5,\n",
" rule6,\n",
" rule7,\n",
" rule8,\n",
" rule9,\n",
" ]\n",
")\n",
"\n",
"# Создание симулятора нечеткой системы\n",
"price_sim = ctrl.ControlSystemSimulation(price_ctrl)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Пример расчета выходной переменной adj_close на основе входных переменных silver_price и oil_price** \\\n",
"Система также формирует подробный журнал выполнения процесса нечеткого логического вывода"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 20,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"=============\n",
" Antecedents \n",
"=============\n",
"Antecedent: silver_price = 60000\n",
" - low : 0.0\n",
" - average : 0.014110000000000011\n",
" - high : 0.99765774\n",
"Antecedent: oil_price = 30\n",
" - low : 1.0\n",
" - average : 0.0\n",
" - high : 0.0\n",
"\n",
"=======\n",
" Rules \n",
"=======\n",
"RULE #0:\n",
" IF silver_price[low] AND oil_price[low] THEN adj_close[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - silver_price[low] : 0.0\n",
" - oil_price[low] : 1.0\n",
" silver_price[low] AND oil_price[low] = 0.0\n",
" Activation (THEN-clause):\n",
" adj_close[low] : 0.0\n",
"\n",
"RULE #1:\n",
" IF silver_price[low] AND oil_price[average] THEN adj_close[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - silver_price[low] : 0.0\n",
" - oil_price[average] : 0.0\n",
" silver_price[low] AND oil_price[average] = 0.0\n",
" Activation (THEN-clause):\n",
" adj_close[low] : 0.0\n",
"\n",
"RULE #2:\n",
" IF silver_price[low] AND oil_price[high] THEN adj_close[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - silver_price[low] : 0.0\n",
" - oil_price[high] : 0.0\n",
" silver_price[low] AND oil_price[high] = 0.0\n",
" Activation (THEN-clause):\n",
" adj_close[low] : 0.0\n",
"\n",
"RULE #3:\n",
" IF silver_price[average] AND oil_price[low] THEN adj_close[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - silver_price[average] : 0.014110000000000011\n",
" - oil_price[low] : 1.0\n",
" silver_price[average] AND oil_price[low] = 0.014110000000000011\n",
" Activation (THEN-clause):\n",
" adj_close[low] : 0.014110000000000011\n",
"\n",
"RULE #4:\n",
" IF silver_price[average] AND oil_price[average] THEN adj_close[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - silver_price[average] : 0.014110000000000011\n",
" - oil_price[average] : 0.0\n",
" silver_price[average] AND oil_price[average] = 0.0\n",
" Activation (THEN-clause):\n",
" adj_close[low] : 0.0\n",
"\n",
"RULE #5:\n",
" IF silver_price[average] AND oil_price[high] THEN adj_close[low]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - silver_price[average] : 0.014110000000000011\n",
" - oil_price[high] : 0.0\n",
" silver_price[average] AND oil_price[high] = 0.0\n",
" Activation (THEN-clause):\n",
" adj_close[low] : 0.0\n",
"\n",
"RULE #6:\n",
" IF silver_price[high] AND oil_price[low] THEN adj_close[average]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - silver_price[high] : 0.99765774\n",
" - oil_price[low] : 1.0\n",
" silver_price[high] AND oil_price[low] = 0.99765774\n",
" Activation (THEN-clause):\n",
" adj_close[average] : 0.99765774\n",
"\n",
"RULE #7:\n",
" IF silver_price[high] AND oil_price[average] THEN adj_close[high]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - silver_price[high] : 0.99765774\n",
" - oil_price[average] : 0.0\n",
" silver_price[high] AND oil_price[average] = 0.0\n",
" Activation (THEN-clause):\n",
" adj_close[high] : 0.0\n",
"\n",
"RULE #8:\n",
" IF silver_price[high] AND oil_price[high] THEN adj_close[high]\n",
"\tAND aggregation function : fmin\n",
"\tOR aggregation function : fmax\n",
"\n",
" Aggregation (IF-clause):\n",
" - silver_price[high] : 0.99765774\n",
" - oil_price[high] : 0.0\n",
" silver_price[high] AND oil_price[high] = 0.0\n",
" Activation (THEN-clause):\n",
" adj_close[high] : 0.0\n",
"\n",
"\n",
"==============================\n",
" Intermediaries and Conquests \n",
"==============================\n",
2025-02-15 12:11:09 +04:00
"Consequent: adj_close = 149.2413379761956\n",
2025-02-13 23:26:33 +04:00
" low:\n",
" Accumulate using accumulation_max : 0.014110000000000011\n",
" average:\n",
" Accumulate using accumulation_max : 0.99765774\n",
" high:\n",
" Accumulate using accumulation_max : 0.0\n",
"\n"
]
},
{
"data": {
"text/plain": [
2025-02-15 12:11:09 +04:00
"np.float64(149.2413379761956)"
2025-02-13 23:26:33 +04:00
]
},
2025-02-15 12:11:09 +04:00
"execution_count": 20,
2025-02-13 23:26:33 +04:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"price_sim.input['silver_price'] = 60000\n",
"price_sim.input['oil_price'] = 30\n",
"price_sim.compute()\n",
"\n",
"price_sim.print_state()\n",
"\n",
"price_sim.output[\"adj_close\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Визуализация функции принадлежности для выходной переменной adj_close** \\\n",
"Функция получена в процессе аккумуляции и используется для дефаззификации значения выходной переменной influx"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 21,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [
{
"data": {
2025-02-15 12:11:09 +04:00
"image/png": "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
2025-02-13 23:26:33 +04:00
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"adj_close.view(sim=price_sim)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Функция для автоматизации вычисления целевой переменной Y на основе вектора признаков X**"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 22,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [],
"source": [
"def fuzzy_pred(row):\n",
" price_sim.input[\"silver_price\"] = row[\"SF_Price\"]\n",
" price_sim.input[\"oil_price\"] = row[\"OF_Price\"]\n",
" price_sim.compute()\n",
" return price_sim.output[\"adj_close\"]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Создадим выборки**"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 23,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Размер обучающей выборки: 1030\n",
"Размер контрольной выборки: 344\n",
"Размер тестовой выборки: 344\n"
]
}
],
"source": [
"import pandas as pd\n",
"import seaborn as sns\n",
"from sklearn.model_selection import train_test_split\n",
"from imblearn.over_sampling import RandomOverSampler\n",
"df=pd.read_csv(\"..//static//csv//FINAL_USO.csv\")\n",
"# Разделение данных на обучающую и временную выборки\n",
"train_df, temp_df = train_test_split(df, test_size=0.4, random_state=42)\n",
"\n",
"# Разделение остатка на контрольную и тестовую выборки\n",
"val_df, test_df = train_test_split(temp_df, test_size=0.5, random_state=42)\n",
"\n",
"# Проверка размеров выборок\n",
"print(\"Размер обучающей выборки:\", len(train_df))\n",
"print(\"Размер контрольной выборки:\", len(val_df))\n",
"print(\"Размер тестовой выборки:\", len(test_df))\n",
"\n",
"# Сохранение выборок в файлы\n",
"train_df.to_csv(\"..//static//csv//train_data.csv\", index=False)\n",
"val_df.to_csv(\"..//static//csv//val_data.csv\", index=False)\n",
"test_df.to_csv(\"..//static//csv//test_data.csv\", index=False)\n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Тестирование нечеткой системы на обучающей выборке"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 24,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.microsoft.datawrangler.viewer.v0+json": {
"columns": [
{
"name": "index",
"rawType": "int64",
"type": "integer"
},
{
"name": "Adj Close",
"rawType": "float64",
"type": "float"
},
{
"name": "Adj_Pred",
"rawType": "float64",
"type": "float"
}
],
"conversionMethod": "pd.DataFrame",
2025-02-15 12:11:09 +04:00
"ref": "395d9ad8-c2bc-4e96-abd7-aef80b9b35aa",
2025-02-13 23:26:33 +04:00
"rows": [
[
"0",
"168.0",
2025-02-15 12:11:09 +04:00
"130.5622120836427"
2025-02-13 23:26:33 +04:00
],
[
"1",
"112.57",
2025-02-15 12:11:09 +04:00
"114.71860410116727"
2025-02-13 23:26:33 +04:00
],
[
"2",
"152.619995",
2025-02-15 12:11:09 +04:00
"128.22795726015912"
2025-02-13 23:26:33 +04:00
],
[
"3",
"114.099998",
2025-02-15 12:11:09 +04:00
"113.72211141602136"
2025-02-13 23:26:33 +04:00
],
[
"4",
"122.370003",
2025-02-15 12:11:09 +04:00
"114.11963744183743"
2025-02-13 23:26:33 +04:00
],
[
"5",
"110.739998",
2025-02-15 12:11:09 +04:00
"118.65233525899755"
2025-02-13 23:26:33 +04:00
],
[
"6",
"120.339996",
2025-02-15 12:11:09 +04:00
"114.2920790567826"
2025-02-13 23:26:33 +04:00
],
[
"7",
"108.529999",
2025-02-15 12:11:09 +04:00
"117.6578355279135"
2025-02-13 23:26:33 +04:00
],
[
"8",
"155.990005",
2025-02-15 12:11:09 +04:00
"119.31665642030298"
2025-02-13 23:26:33 +04:00
],
[
"9",
"152.619995",
2025-02-15 12:11:09 +04:00
"122.122485315354"
2025-02-13 23:26:33 +04:00
],
[
"10",
"114.690002",
2025-02-15 12:11:09 +04:00
"113.14420001833811"
2025-02-13 23:26:33 +04:00
],
[
"11",
"116.720001",
2025-02-15 12:11:09 +04:00
"119.85874650696019"
2025-02-13 23:26:33 +04:00
],
[
"12",
"133.919998",
2025-02-15 12:11:09 +04:00
"117.72446713035714"
2025-02-13 23:26:33 +04:00
],
[
"13",
"124.389999",
2025-02-15 12:11:09 +04:00
"114.49943272887351"
2025-02-13 23:26:33 +04:00
],
[
"14",
"124.230003",
2025-02-15 12:11:09 +04:00
"117.6826810238513"
2025-02-13 23:26:33 +04:00
]
],
"shape": {
"columns": 2,
"rows": 15
}
},
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Adj Close</th>\n",
" <th>Adj_Pred</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>168.000000</td>\n",
2025-02-15 12:11:09 +04:00
" <td>130.562212</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>112.570000</td>\n",
2025-02-15 12:11:09 +04:00
" <td>114.718604</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>152.619995</td>\n",
2025-02-15 12:11:09 +04:00
" <td>128.227957</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>114.099998</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.722111</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>122.370003</td>\n",
2025-02-15 12:11:09 +04:00
" <td>114.119637</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>110.739998</td>\n",
2025-02-15 12:11:09 +04:00
" <td>118.652335</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>120.339996</td>\n",
2025-02-15 12:11:09 +04:00
" <td>114.292079</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>108.529999</td>\n",
2025-02-15 12:11:09 +04:00
" <td>117.657836</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>155.990005</td>\n",
2025-02-15 12:11:09 +04:00
" <td>119.316656</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>152.619995</td>\n",
2025-02-15 12:11:09 +04:00
" <td>122.122485</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>114.690002</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.144200</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>116.720001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>119.858747</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>133.919998</td>\n",
2025-02-15 12:11:09 +04:00
" <td>117.724467</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>124.389999</td>\n",
2025-02-15 12:11:09 +04:00
" <td>114.499433</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>124.230003</td>\n",
2025-02-15 12:11:09 +04:00
" <td>117.682681</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Adj Close Adj_Pred\n",
2025-02-15 12:11:09 +04:00
"0 168.000000 130.562212\n",
"1 112.570000 114.718604\n",
"2 152.619995 128.227957\n",
"3 114.099998 113.722111\n",
"4 122.370003 114.119637\n",
"5 110.739998 118.652335\n",
"6 120.339996 114.292079\n",
"7 108.529999 117.657836\n",
"8 155.990005 119.316656\n",
"9 152.619995 122.122485\n",
"10 114.690002 113.144200\n",
"11 116.720001 119.858747\n",
"12 133.919998 117.724467\n",
"13 124.389999 114.499433\n",
"14 124.230003 117.682681"
2025-02-13 23:26:33 +04:00
]
},
2025-02-15 12:11:09 +04:00
"execution_count": 24,
2025-02-13 23:26:33 +04:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"train_df = pd.read_csv(\"..//static//csv//train_data.csv\")\n",
"\n",
"result_train = train_df.copy()\n",
"\n",
"\n",
"result_train[\"Adj_Pred\"] = result_train.apply(fuzzy_pred, axis=1)\n",
"selected_cm=result_train[['Adj Close','Adj_Pred']]\n",
"selected_cm.head(15)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Тестирование нечеткой системы на тестовой выборке"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 25,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.microsoft.datawrangler.viewer.v0+json": {
"columns": [
{
"name": "index",
"rawType": "int64",
"type": "integer"
},
{
"name": "Adj Close",
"rawType": "float64",
"type": "float"
},
{
"name": "Adj_Pred",
"rawType": "float64",
"type": "float"
}
],
"conversionMethod": "pd.DataFrame",
2025-02-15 12:11:09 +04:00
"ref": "70457667-97bb-4889-ae06-9d87735e8bc3",
2025-02-13 23:26:33 +04:00
"rows": [
[
"0",
"160.53999299999995",
2025-02-15 12:11:09 +04:00
"126.99265205201864"
2025-02-13 23:26:33 +04:00
],
[
"1",
"121.610001",
2025-02-15 12:11:09 +04:00
"120.45495123466824"
2025-02-13 23:26:33 +04:00
],
[
"2",
"126.160004",
2025-02-15 12:11:09 +04:00
"116.32803751504055"
2025-02-13 23:26:33 +04:00
],
[
"3",
"160.990005",
2025-02-15 12:11:09 +04:00
"137.57239627996805"
2025-02-13 23:26:33 +04:00
],
[
"4",
"173.610001",
"166.75034873228836"
],
[
"5",
"118.970001",
2025-02-15 12:11:09 +04:00
"115.56082059594011"
2025-02-13 23:26:33 +04:00
],
[
"6",
"126.68",
2025-02-15 12:11:09 +04:00
"116.50064031098007"
2025-02-13 23:26:33 +04:00
],
[
"7",
"117.519997",
2025-02-15 12:11:09 +04:00
"114.24514943448392"
2025-02-13 23:26:33 +04:00
],
[
"8",
"126.730003",
2025-02-15 12:11:09 +04:00
"113.75929069349351"
2025-02-13 23:26:33 +04:00
],
[
"9",
"120.309998",
2025-02-15 12:11:09 +04:00
"114.21895196778395"
2025-02-13 23:26:33 +04:00
],
[
"10",
"114.419998",
2025-02-15 12:11:09 +04:00
"113.38416250646499"
2025-02-13 23:26:33 +04:00
],
[
"11",
"124.540001",
2025-02-15 12:11:09 +04:00
"113.76979939419816"
2025-02-13 23:26:33 +04:00
],
[
"12",
"115.43",
2025-02-15 12:11:09 +04:00
"117.66191604712311"
2025-02-13 23:26:33 +04:00
],
[
"13",
"118.220001",
2025-02-15 12:11:09 +04:00
"113.78325648362738"
2025-02-13 23:26:33 +04:00
],
[
"14",
"121.050003",
2025-02-15 12:11:09 +04:00
"120.40893556665435"
2025-02-13 23:26:33 +04:00
],
[
"15",
"106.220001",
2025-02-15 12:11:09 +04:00
"115.89755210665803"
2025-02-13 23:26:33 +04:00
],
[
"16",
"109.139999",
2025-02-15 12:11:09 +04:00
"118.87603802886166"
2025-02-13 23:26:33 +04:00
],
[
"17",
"112.239998",
2025-02-15 12:11:09 +04:00
"114.7779968128804"
2025-02-13 23:26:33 +04:00
],
[
"18",
"122.879997",
2025-02-15 12:11:09 +04:00
"116.58487451170102"
2025-02-13 23:26:33 +04:00
],
[
"19",
"117.290001",
2025-02-15 12:11:09 +04:00
"119.73028140033199"
2025-02-13 23:26:33 +04:00
],
[
"20",
"127.400002",
2025-02-15 12:11:09 +04:00
"114.64853143026725"
2025-02-13 23:26:33 +04:00
],
[
"21",
"171.020004",
2025-02-15 12:11:09 +04:00
"134.4902389227914"
2025-02-13 23:26:33 +04:00
],
[
"22",
"118.120003",
2025-02-15 12:11:09 +04:00
"115.5094419567893"
2025-02-13 23:26:33 +04:00
],
[
"23",
"119.43",
2025-02-15 12:11:09 +04:00
"115.42212169942749"
2025-02-13 23:26:33 +04:00
],
[
"24",
"115.800003",
2025-02-15 12:11:09 +04:00
"113.63460663693257"
2025-02-13 23:26:33 +04:00
]
],
"shape": {
"columns": 2,
"rows": 25
}
},
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Adj Close</th>\n",
" <th>Adj_Pred</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>160.539993</td>\n",
2025-02-15 12:11:09 +04:00
" <td>126.992652</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>121.610001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>120.454951</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>126.160004</td>\n",
2025-02-15 12:11:09 +04:00
" <td>116.328038</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>160.990005</td>\n",
2025-02-15 12:11:09 +04:00
" <td>137.572396</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>173.610001</td>\n",
" <td>166.750349</td>\n",
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>118.970001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>115.560821</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>126.680000</td>\n",
2025-02-15 12:11:09 +04:00
" <td>116.500640</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>117.519997</td>\n",
2025-02-15 12:11:09 +04:00
" <td>114.245149</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>126.730003</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.759291</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>120.309998</td>\n",
2025-02-15 12:11:09 +04:00
" <td>114.218952</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>114.419998</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.384163</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>124.540001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.769799</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>115.430000</td>\n",
2025-02-15 12:11:09 +04:00
" <td>117.661916</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>118.220001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.783256</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>121.050003</td>\n",
2025-02-15 12:11:09 +04:00
" <td>120.408936</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>106.220001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>115.897552</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>109.139999</td>\n",
2025-02-15 12:11:09 +04:00
" <td>118.876038</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>112.239998</td>\n",
2025-02-15 12:11:09 +04:00
" <td>114.777997</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>122.879997</td>\n",
2025-02-15 12:11:09 +04:00
" <td>116.584875</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>117.290001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>119.730281</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>127.400002</td>\n",
2025-02-15 12:11:09 +04:00
" <td>114.648531</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>171.020004</td>\n",
2025-02-15 12:11:09 +04:00
" <td>134.490239</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>118.120003</td>\n",
2025-02-15 12:11:09 +04:00
" <td>115.509442</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>119.430000</td>\n",
2025-02-15 12:11:09 +04:00
" <td>115.422122</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>115.800003</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.634607</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Adj Close Adj_Pred\n",
2025-02-15 12:11:09 +04:00
"0 160.539993 126.992652\n",
"1 121.610001 120.454951\n",
"2 126.160004 116.328038\n",
"3 160.990005 137.572396\n",
2025-02-13 23:26:33 +04:00
"4 173.610001 166.750349\n",
2025-02-15 12:11:09 +04:00
"5 118.970001 115.560821\n",
"6 126.680000 116.500640\n",
"7 117.519997 114.245149\n",
"8 126.730003 113.759291\n",
"9 120.309998 114.218952\n",
"10 114.419998 113.384163\n",
"11 124.540001 113.769799\n",
"12 115.430000 117.661916\n",
"13 118.220001 113.783256\n",
"14 121.050003 120.408936\n",
"15 106.220001 115.897552\n",
"16 109.139999 118.876038\n",
"17 112.239998 114.777997\n",
"18 122.879997 116.584875\n",
"19 117.290001 119.730281\n",
"20 127.400002 114.648531\n",
"21 171.020004 134.490239\n",
"22 118.120003 115.509442\n",
"23 119.430000 115.422122\n",
"24 115.800003 113.634607"
2025-02-13 23:26:33 +04:00
]
},
2025-02-15 12:11:09 +04:00
"execution_count": 25,
2025-02-13 23:26:33 +04:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"test_df=pd.read_csv(\"..//static//csv//test_data.csv\")\n",
"result_test = test_df.copy()\n",
"\n",
"result_test[\"Adj_Pred\"] = result_test.apply(fuzzy_pred, axis=1)\n",
"\n",
"selected_cm=result_test[['Adj Close','Adj_Pred']]\n",
"selected_cm.head(25)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Тестирование нечёткой системы на контрольной выборке"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 26,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [
{
"data": {
"application/vnd.microsoft.datawrangler.viewer.v0+json": {
"columns": [
{
"name": "index",
"rawType": "int64",
"type": "integer"
},
{
"name": "Adj Close",
"rawType": "float64",
"type": "float"
},
{
"name": "Adj_Pred",
"rawType": "float64",
"type": "float"
}
],
"conversionMethod": "pd.DataFrame",
2025-02-15 12:11:09 +04:00
"ref": "aa39a7e9-0210-4408-b56c-0e86186d7f71",
2025-02-13 23:26:33 +04:00
"rows": [
[
"0",
"117.589996",
2025-02-15 12:11:09 +04:00
"116.4285421361288"
2025-02-13 23:26:33 +04:00
],
[
"1",
"121.650002",
2025-02-15 12:11:09 +04:00
"117.40539503151582"
2025-02-13 23:26:33 +04:00
],
[
"2",
"166.339996",
2025-02-15 12:11:09 +04:00
"139.32357949098417"
2025-02-13 23:26:33 +04:00
],
[
"3",
"116.309998",
2025-02-15 12:11:09 +04:00
"113.38397280694028"
2025-02-13 23:26:33 +04:00
],
[
"4",
"115.199997",
2025-02-15 12:11:09 +04:00
"120.43925933442551"
2025-02-13 23:26:33 +04:00
],
[
"5",
"126.940002",
2025-02-15 12:11:09 +04:00
"113.26607717555845"
2025-02-13 23:26:33 +04:00
],
[
"6",
"127.480003",
2025-02-15 12:11:09 +04:00
"115.50212271744391"
2025-02-13 23:26:33 +04:00
],
[
"7",
"120.779999",
2025-02-15 12:11:09 +04:00
"118.49342950573612"
2025-02-13 23:26:33 +04:00
],
[
"8",
"151.619995",
2025-02-15 12:11:09 +04:00
"128.0419181152574"
2025-02-13 23:26:33 +04:00
],
[
"9",
"118.290001",
2025-02-15 12:11:09 +04:00
"115.09643869970799"
2025-02-13 23:26:33 +04:00
],
[
"10",
"122.860001",
2025-02-15 12:11:09 +04:00
"114.2494028240732"
2025-02-13 23:26:33 +04:00
],
[
"11",
"118.360001",
2025-02-15 12:11:09 +04:00
"113.15082461681098"
2025-02-13 23:26:33 +04:00
],
[
"12",
"123.32",
2025-02-15 12:11:09 +04:00
"115.11705124534586"
2025-02-13 23:26:33 +04:00
],
[
"13",
"120.650002",
2025-02-15 12:11:09 +04:00
"118.46798544233826"
2025-02-13 23:26:33 +04:00
],
[
"14",
"161.509995",
2025-02-15 12:11:09 +04:00
"131.9781543639097"
2025-02-13 23:26:33 +04:00
],
[
"15",
"120.589996",
2025-02-15 12:11:09 +04:00
"118.54123325246917"
2025-02-13 23:26:33 +04:00
],
[
"16",
"120.959999",
2025-02-15 12:11:09 +04:00
"115.59520177029755"
2025-02-13 23:26:33 +04:00
],
[
"17",
"115.989998",
2025-02-15 12:11:09 +04:00
"113.31571770449513"
2025-02-13 23:26:33 +04:00
],
[
"18",
"120.989998",
2025-02-15 12:11:09 +04:00
"115.77483561646766"
2025-02-13 23:26:33 +04:00
],
[
"19",
"168.78999299999995",
"166.73290406408321"
],
[
"20",
"114.290001",
2025-02-15 12:11:09 +04:00
"119.82826231852792"
2025-02-13 23:26:33 +04:00
],
[
"21",
"114.209999",
2025-02-15 12:11:09 +04:00
"119.66965635658467"
2025-02-13 23:26:33 +04:00
],
[
"22",
"115.050003",
2025-02-15 12:11:09 +04:00
"112.65735563578419"
2025-02-13 23:26:33 +04:00
],
[
"23",
"118.860001",
2025-02-15 12:11:09 +04:00
"114.26824965045321"
2025-02-13 23:26:33 +04:00
],
[
"24",
"120.050003",
2025-02-15 12:11:09 +04:00
"115.00997512321632"
2025-02-13 23:26:33 +04:00
]
],
"shape": {
"columns": 2,
"rows": 25
}
},
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Adj Close</th>\n",
" <th>Adj_Pred</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>117.589996</td>\n",
2025-02-15 12:11:09 +04:00
" <td>116.428542</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>121.650002</td>\n",
2025-02-15 12:11:09 +04:00
" <td>117.405395</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>166.339996</td>\n",
2025-02-15 12:11:09 +04:00
" <td>139.323579</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>116.309998</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.383973</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>115.199997</td>\n",
2025-02-15 12:11:09 +04:00
" <td>120.439259</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>5</th>\n",
" <td>126.940002</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.266077</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>6</th>\n",
" <td>127.480003</td>\n",
2025-02-15 12:11:09 +04:00
" <td>115.502123</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>7</th>\n",
" <td>120.779999</td>\n",
2025-02-15 12:11:09 +04:00
" <td>118.493430</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>8</th>\n",
" <td>151.619995</td>\n",
2025-02-15 12:11:09 +04:00
" <td>128.041918</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>9</th>\n",
" <td>118.290001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>115.096439</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>10</th>\n",
" <td>122.860001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>114.249403</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>11</th>\n",
" <td>118.360001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.150825</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>12</th>\n",
" <td>123.320000</td>\n",
2025-02-15 12:11:09 +04:00
" <td>115.117051</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>13</th>\n",
" <td>120.650002</td>\n",
2025-02-15 12:11:09 +04:00
" <td>118.467985</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>14</th>\n",
" <td>161.509995</td>\n",
2025-02-15 12:11:09 +04:00
" <td>131.978154</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>120.589996</td>\n",
2025-02-15 12:11:09 +04:00
" <td>118.541233</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>16</th>\n",
" <td>120.959999</td>\n",
2025-02-15 12:11:09 +04:00
" <td>115.595202</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>17</th>\n",
" <td>115.989998</td>\n",
2025-02-15 12:11:09 +04:00
" <td>113.315718</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>18</th>\n",
" <td>120.989998</td>\n",
2025-02-15 12:11:09 +04:00
" <td>115.774836</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>168.789993</td>\n",
" <td>166.732904</td>\n",
" </tr>\n",
" <tr>\n",
" <th>20</th>\n",
" <td>114.290001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>119.828262</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>21</th>\n",
" <td>114.209999</td>\n",
2025-02-15 12:11:09 +04:00
" <td>119.669656</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>115.050003</td>\n",
2025-02-15 12:11:09 +04:00
" <td>112.657356</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>23</th>\n",
" <td>118.860001</td>\n",
2025-02-15 12:11:09 +04:00
" <td>114.268250</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>120.050003</td>\n",
2025-02-15 12:11:09 +04:00
" <td>115.009975</td>\n",
2025-02-13 23:26:33 +04:00
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Adj Close Adj_Pred\n",
2025-02-15 12:11:09 +04:00
"0 117.589996 116.428542\n",
"1 121.650002 117.405395\n",
"2 166.339996 139.323579\n",
"3 116.309998 113.383973\n",
"4 115.199997 120.439259\n",
"5 126.940002 113.266077\n",
"6 127.480003 115.502123\n",
"7 120.779999 118.493430\n",
"8 151.619995 128.041918\n",
"9 118.290001 115.096439\n",
"10 122.860001 114.249403\n",
"11 118.360001 113.150825\n",
"12 123.320000 115.117051\n",
"13 120.650002 118.467985\n",
"14 161.509995 131.978154\n",
"15 120.589996 118.541233\n",
"16 120.959999 115.595202\n",
"17 115.989998 113.315718\n",
"18 120.989998 115.774836\n",
2025-02-13 23:26:33 +04:00
"19 168.789993 166.732904\n",
2025-02-15 12:11:09 +04:00
"20 114.290001 119.828262\n",
"21 114.209999 119.669656\n",
"22 115.050003 112.657356\n",
"23 118.860001 114.268250\n",
"24 120.050003 115.009975"
2025-02-13 23:26:33 +04:00
]
},
2025-02-15 12:11:09 +04:00
"execution_count": 26,
2025-02-13 23:26:33 +04:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"val_df=pd.read_csv(\"..//static//csv//val_data.csv\")\n",
"result_val = val_df.copy()\n",
"\n",
"result_val[\"Adj_Pred\"] = result_val.apply(fuzzy_pred, axis=1)\n",
"\n",
"selected_cm=result_val[['Adj Close','Adj_Pred']]\n",
"selected_cm.head(25)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Оценка результатов на основе метрик для задачи регрессии"
]
},
{
"cell_type": "code",
2025-02-15 12:11:09 +04:00
"execution_count": 27,
2025-02-13 23:26:33 +04:00
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
2025-02-15 12:11:09 +04:00
"{'RMSE_train': 14.063806361503557,\n",
" 'RMSE_test': 13.63382917388284,\n",
" 'RMAE_test': 3.152710529049624,\n",
" 'R2_test': 0.35443568923237845}"
2025-02-13 23:26:33 +04:00
]
},
2025-02-15 12:11:09 +04:00
"execution_count": 27,
2025-02-13 23:26:33 +04:00
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import math\n",
"from sklearn import metrics\n",
"\n",
"\n",
"rmetrics = {}\n",
"rmetrics[\"RMSE_train\"] = math.sqrt(\n",
" metrics.mean_squared_error(result_train[\"Adj Close\"], result_train[\"Adj_Pred\"])\n",
")\n",
"rmetrics[\"RMSE_test\"] = math.sqrt(\n",
" metrics.mean_squared_error(result_test[\"Adj Close\"], result_test[\"Adj_Pred\"])\n",
")\n",
"rmetrics[\"RMAE_test\"] = math.sqrt(\n",
" metrics.mean_absolute_error(result_test[\"Adj Close\"], result_test[\"Adj_Pred\"])\n",
")\n",
"rmetrics[\"R2_test\"] = metrics.r2_score(\n",
" result_test[\"Adj Close\"], result_test[\"Adj_Pred\"]\n",
")\n",
"\n",
"rmetrics"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.12.6"
}
},
"nbformat": 4,
"nbformat_minor": 2
}