2025-02-08 21:28:06 +04:00
|
|
|
|
{
|
|
|
|
|
"cells": [
|
2025-02-08 21:28:30 +04:00
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Начало лабораторной\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Цены на кофе - https://www.kaggle.com/datasets/mayankanand2701/starbucks-stock-price-dataset"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Выгрузка данных"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"execution_count": 35,
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"data": {
|
|
|
|
|
"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",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" </thead>\n",
|
|
|
|
|
" <tbody>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>0</th>\n",
|
|
|
|
|
" <td>1992-06-26</td>\n",
|
|
|
|
|
" <td>0.328125</td>\n",
|
|
|
|
|
" <td>0.347656</td>\n",
|
|
|
|
|
" <td>0.320313</td>\n",
|
|
|
|
|
" <td>0.335938</td>\n",
|
|
|
|
|
" <td>0.260703</td>\n",
|
|
|
|
|
" <td>224358400</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>1</th>\n",
|
|
|
|
|
" <td>1992-06-29</td>\n",
|
|
|
|
|
" <td>0.339844</td>\n",
|
|
|
|
|
" <td>0.367188</td>\n",
|
|
|
|
|
" <td>0.332031</td>\n",
|
|
|
|
|
" <td>0.359375</td>\n",
|
|
|
|
|
" <td>0.278891</td>\n",
|
|
|
|
|
" <td>58732800</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>2</th>\n",
|
|
|
|
|
" <td>1992-06-30</td>\n",
|
|
|
|
|
" <td>0.367188</td>\n",
|
|
|
|
|
" <td>0.371094</td>\n",
|
|
|
|
|
" <td>0.343750</td>\n",
|
|
|
|
|
" <td>0.347656</td>\n",
|
|
|
|
|
" <td>0.269797</td>\n",
|
|
|
|
|
" <td>34777600</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>3</th>\n",
|
|
|
|
|
" <td>1992-07-01</td>\n",
|
|
|
|
|
" <td>0.351563</td>\n",
|
|
|
|
|
" <td>0.359375</td>\n",
|
|
|
|
|
" <td>0.339844</td>\n",
|
|
|
|
|
" <td>0.355469</td>\n",
|
|
|
|
|
" <td>0.275860</td>\n",
|
|
|
|
|
" <td>18316800</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>4</th>\n",
|
|
|
|
|
" <td>1992-07-02</td>\n",
|
|
|
|
|
" <td>0.359375</td>\n",
|
|
|
|
|
" <td>0.359375</td>\n",
|
|
|
|
|
" <td>0.347656</td>\n",
|
|
|
|
|
" <td>0.355469</td>\n",
|
|
|
|
|
" <td>0.275860</td>\n",
|
|
|
|
|
" <td>13996800</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>...</th>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" <td>...</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>8031</th>\n",
|
|
|
|
|
" <td>2024-05-17</td>\n",
|
|
|
|
|
" <td>75.269997</td>\n",
|
|
|
|
|
" <td>78.000000</td>\n",
|
|
|
|
|
" <td>74.919998</td>\n",
|
|
|
|
|
" <td>77.849998</td>\n",
|
|
|
|
|
" <td>77.849998</td>\n",
|
|
|
|
|
" <td>14436500</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>8032</th>\n",
|
|
|
|
|
" <td>2024-05-20</td>\n",
|
|
|
|
|
" <td>77.680000</td>\n",
|
|
|
|
|
" <td>78.320000</td>\n",
|
|
|
|
|
" <td>76.709999</td>\n",
|
|
|
|
|
" <td>77.540001</td>\n",
|
|
|
|
|
" <td>77.540001</td>\n",
|
|
|
|
|
" <td>11183800</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>8033</th>\n",
|
|
|
|
|
" <td>2024-05-21</td>\n",
|
|
|
|
|
" <td>77.559998</td>\n",
|
|
|
|
|
" <td>78.220001</td>\n",
|
|
|
|
|
" <td>77.500000</td>\n",
|
|
|
|
|
" <td>77.720001</td>\n",
|
|
|
|
|
" <td>77.720001</td>\n",
|
|
|
|
|
" <td>8916600</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>8034</th>\n",
|
|
|
|
|
" <td>2024-05-22</td>\n",
|
|
|
|
|
" <td>77.699997</td>\n",
|
|
|
|
|
" <td>81.019997</td>\n",
|
|
|
|
|
" <td>77.440002</td>\n",
|
|
|
|
|
" <td>80.720001</td>\n",
|
|
|
|
|
" <td>80.720001</td>\n",
|
|
|
|
|
" <td>22063400</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" <tr>\n",
|
|
|
|
|
" <th>8035</th>\n",
|
|
|
|
|
" <td>2024-05-23</td>\n",
|
|
|
|
|
" <td>80.099998</td>\n",
|
|
|
|
|
" <td>80.699997</td>\n",
|
|
|
|
|
" <td>79.169998</td>\n",
|
|
|
|
|
" <td>79.260002</td>\n",
|
|
|
|
|
" <td>79.260002</td>\n",
|
|
|
|
|
" <td>4651418</td>\n",
|
|
|
|
|
" </tr>\n",
|
|
|
|
|
" </tbody>\n",
|
|
|
|
|
"</table>\n",
|
|
|
|
|
"<p>8036 rows × 7 columns</p>\n",
|
|
|
|
|
"</div>"
|
|
|
|
|
],
|
|
|
|
|
"text/plain": [
|
|
|
|
|
" Date Open High Low Close Adj Close \\\n",
|
|
|
|
|
"0 1992-06-26 0.328125 0.347656 0.320313 0.335938 0.260703 \n",
|
|
|
|
|
"1 1992-06-29 0.339844 0.367188 0.332031 0.359375 0.278891 \n",
|
|
|
|
|
"2 1992-06-30 0.367188 0.371094 0.343750 0.347656 0.269797 \n",
|
|
|
|
|
"3 1992-07-01 0.351563 0.359375 0.339844 0.355469 0.275860 \n",
|
|
|
|
|
"4 1992-07-02 0.359375 0.359375 0.347656 0.355469 0.275860 \n",
|
|
|
|
|
"... ... ... ... ... ... ... \n",
|
|
|
|
|
"8031 2024-05-17 75.269997 78.000000 74.919998 77.849998 77.849998 \n",
|
|
|
|
|
"8032 2024-05-20 77.680000 78.320000 76.709999 77.540001 77.540001 \n",
|
|
|
|
|
"8033 2024-05-21 77.559998 78.220001 77.500000 77.720001 77.720001 \n",
|
|
|
|
|
"8034 2024-05-22 77.699997 81.019997 77.440002 80.720001 80.720001 \n",
|
|
|
|
|
"8035 2024-05-23 80.099998 80.699997 79.169998 79.260002 79.260002 \n",
|
|
|
|
|
"\n",
|
|
|
|
|
" Volume \n",
|
|
|
|
|
"0 224358400 \n",
|
|
|
|
|
"1 58732800 \n",
|
|
|
|
|
"2 34777600 \n",
|
|
|
|
|
"3 18316800 \n",
|
|
|
|
|
"4 13996800 \n",
|
|
|
|
|
"... ... \n",
|
|
|
|
|
"8031 14436500 \n",
|
|
|
|
|
"8032 11183800 \n",
|
|
|
|
|
"8033 8916600 \n",
|
|
|
|
|
"8034 22063400 \n",
|
|
|
|
|
"8035 4651418 \n",
|
|
|
|
|
"\n",
|
|
|
|
|
"[8036 rows x 7 columns]"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"execution_count": 35,
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "execute_result"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
2025-02-13 21:31:35 +04:00
|
|
|
|
"import pandas as pd\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"df = pd.read_csv(\"./static/csv/Starbucks Dataset.csv\")\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"df"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Атрибуты\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Date — Дата\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Open — Цена открытия\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"High — Макс. цена\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Low — Мин. цена\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Close — Цена закрытия\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Adj Close — Скорректированная цена закрытия\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Volume — Объем торгов"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Выбор входных и выходных переменных"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"Входные переменные будут Open (цена открытия) и Volume (объем торгов)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Выходная переменная - Close (цена закрытия)"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Настройка параметров лингвистических переменных"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"Термы: Низкий (Low) Средний (Medium) Высокий (High)"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"execution_count": null,
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2025-02-15 10:29:58 +04:00
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAACZ4UlEQVR4nOzdd3hT5d8G8DtJ0920dA8KZZYisgVZArIEZLhFkCXgAkWU5WCICK+AooKgooI/QFBkKYgiWtkCAi5KmaXQ0tJB90qb8/5xSGxI2qZp2pOc3J/r6pXTkzO+6ZNC7j7PeY5CEAQBREREREREVCGl1AUQERERERHZOwYnIiIiIiKiKjA4ERERERERVYHBiYiIiIiIqAoMTkRERERERFVgcCIiIiIiIqoCgxMREREREVEVGJyIiIiIiIiq4CJ1AURERCRvRUVFyMzMhIuLC4KDg6Uuh4jIKuxxIiIiIpv7+eefMXToUPj5+cHDwwMRERF48cUXpS6LiMhq7HEiciJjx47Fli1bkJeXJ3UpRCRjH330EaZMmYLu3bvj/fffR0REBACgYcOGEldGRGQ9hSAIgtRFEFHtycjIwIYNG3DgwAHs378f6enp6NevH9q1a4dHH30U7dq1k7pEIpKR8+fP484778S4cePw0UcfQaFQSF0SEZFNMDgRydimTZswceJE5OXlISoqClqtFikpKWjXrh3+/PNPaLVajBkzBp988glcXV2lLpeIZGDKlCn47rvvcP78eajVaqnLISKyGV7jRCRThw4dwqhRoxAaGopDhw7h8uXL6Nu3L9zd3XH8+HEkJydjxIgRWLduHV566SUAgCAIiIqKwrBhw0yOV1RUBF9fXzz99NMAgNjYWCgUCmzZssVkW29vb4wdO9bw/dq1a6FQKJCQkGBY9++//6JevXq4//77UVpaarTdiRMnjI6Xnp4OhUKBefPmGa03t27JkiVQKBTo1auXYZ2+1tjYWKNtBw8ebPYYt9PvX9GXude6f/9+PP300wgICIBGo8Ho0aNx8+ZNo+NGRUUZ7QsA33zzDRQKBaKiogzrEhISoFAosHTpUpPaWrVqZfRaS0pKMGfOHHTo0AG+vr7w8vJCjx498Ouvv5p9bfp6b/8qf/7yKvoZlG9bAFi/fj06dOgADw8P+Pv74/HHH8fVq1eN6uzZsycaN26MtLQ0w/p58+aZ9FAsXboULi4u2L17t2Fdr1690KpVK5P6li5daraejz76CHfccQfc3NwQHh6O559/HllZWSb7//777xg0aBDq1asHLy8vtG7dGu+//z4AcahrZe+D8ue1tG0ro293S37e+p+JuW3Xrl1rtN2qVavQqlUreHp6Gm1n7nf5dqdOncLAgQOh0Wjg7e2NPn364OjRo0bbHD16FB06dMBzzz2HkJAQuLm5oVWrVvj0008N22RlZZnUae79fbusrCxMnToVkZGRcHNzQ9OmTfF///d/0Ol0Zn9u27dvN9q/qKgI9erVMznflStX8NxzzyE6OhoeHh4ICAjAI488YvbnXF5lbWTu34dLly7hkUcegb+/Pzw9PXH33Xdj165dRsfU/3uzefNmvPrqqwgNDYWXlxeGDh1q9DsEVNzmffv2NWxTWlqKBQsWoEmTJnBzc0NUVBReffVVFBcXGx0rKirKsL9SqURoaCgee+wxJCYmVvozIHImvMaJSKYWL14MnU6HTZs2oUOHDibPBwYG4ssvv8SZM2fw8ccfY+7cuQgODsaoUaPwzjvvIDMzE/7+/obtv/vuO+Tk5GDUqFE1ru3q1au477770KJFC3z99ddwcbHNP0VZWVlYtGiRRdvu37/f6IO4JV544QXcddddRusmTJhgdtvJkyfDz88P8+bNQ3x8PFatWoUrV64YPhSZU1paitdee61aNd0uJycHa9aswYgRIzBx4kTk5ubis88+w4ABA3Ds2DG0bdvW7H5vvvkmGjVqBABYtmyZScgr74EHHsCDDz4IADhw4AA++eQTo+cXLlyIN954A48++igmTJiAtLQ0fPjhh7jnnntw6tQp+Pn5wdXVFVu3bsXdd9+NBx54APv27YObm5vJuXbs2IGZM2di+fLlGDRokFU/k3nz5mH+/Pno27cvnn32WUN7HD9+HIcOHTL0iuzduxf3338/wsLC8OKLLyI0NBRxcXH4/vvv8eKLL+Lpp582+kD65JNPGv0sACAoKMhsDTVp2xEjRhhe++7du/HVV19VuG2LFi0M50lPTzf8UURv8+bNeO6559CrVy9MmTIFXl5eiIuLw9tvv11lHf/++y969OgBjUaDGTNmQK1W4+OPP0avXr3w22+/oXPnzgDE4cEnTpyAi4sLnn/+eTRp0gTbt2/HpEmTkJGRgVmzZsHLywv/+9//KqzTnIKCAvTs2RNJSUl4+umn0aBBAxw+fBizZ8/G9evXsXz5cqPt3d3d8cUXX2D48OGGdVu3bkVRUZHJsY8fP47Dhw/j8ccfR/369ZGQkIBVq1ahV69eOHPmDDw9Pc3WFBQUZHgd+uNv27bNaF2TJk0AAKmpqejatSsKCgrwwgsvICAgAOvWrcPQoUOxZcsWPPDAA0bHXrhwIRQKBWbOnIkbN25g+fLl6Nu3L06fPg0PDw/DdvXr1zf5dy8sLMywPGHCBKxbtw4PP/wwXn75Zfz+++9YtGgR4uLisG3bNqP9evTogUmTJkGn0+Gff/7B8uXLkZycjAMHDph9/URORyAiWfL39xcaNmxotG7MmDGCl5eX0bo33nhDACB89913giAIQnx8vABAWLVqldF2Q4cOFaKiogSdTicIgiD8+uuvAgDhm2++MTm3l5eXMGbMGMP3X3zxhQBAuHz5spCZmSm0bNlSiI6OFtLT04320293/Phxo/VpaWkCAGHu3LlG629fN2PGDCE4OFjo0KGD0LNnT8N6fa2//vqrYV3nzp2FgQMHmj3u7ax5rR06dBBKSkoM69955x0BgLBjxw7DuoYNGxrt+9FHHwlubm5C7969jdru8uXLAgBhyZIlJue/4447jF5raWmpUFxcbLTNzZs3hZCQEGH8+PEm+3/yyScCAOHEiROGdYMHDzZ57wiCIGi1WgGAMH/+fJPXe/nyZUEQBCEhIUFQqVTCwoULjfb9+++/BRcXF5P18fHxQr169YRRo0YJgiAIc+fOFfT/NZ06dUrw8vISnn/+eZNaevbsKdxxxx0m65csWWJUz40bNwRXV1ehf//+QllZmWG7FStWCACEzz//XBAE8efWqFEjoWHDhsLNmzeNjql/z9+usveOpW1bmXPnzgkAhKVLl1b4+srr1q2b0Lt3b8P3+vfNF198YVg3YsQIwc/PTygsLDSsq+z9Xd7w4cMFV1dX4eLFi4Z1ycnJgo+Pj3DPPfcY1jVs2FAAIKxdu9awrrS0VOjTp4/g5uZm8ntf2fu7vAULFgheXl7CuXPnjNbPmjVLUKlUQmJiotHxRowYIbi4uAgpKSmGbfv06SM88cQTJucrKCgwOd+RI0cEAMKXX35ZaV3llX//3m7q1KkCAOHAgQOGdbm5uUKjRo2EqKgow/tT3x4RERFCTk6OYduvv/5aACC8//77hnUV/R7onT59WgAgTJgwwWj9K6+8IgAQfvnlF8O629+zgiAITzzxhODp6Vn1CydyEhyqRyRTubm5Ft0vJSQkBIDYUwEAzZs3R+fOnbFhwwbDNpmZmfjhhx8wcuRIk96S3NxcpKenG31VpKioCEOHDkVaWhr27NmDgIAAa16aWUlJSfjwww/xxhtvwNvbu9Jtt27diuPHj2Px4sU2O//tJk2aZHR9x7PPPmsy3Ky8goICvPnmm5g8eTIaNGhQ4Ta3/6zLysqMtlGpVIbr1XQ6HTIzM1FaWoqOHTvi5MmTJsfU//Xd3d29ytdUUlICAGZ7hvS2bt0KnU6HRx991KjO0NBQNGvWzGTIYPPmzfHtt99iw4YNeOuttwzrr1+/jiFDhqBLly6GoXK3KysrM/l5FBQUGG3z888/o6SkBFOnToVS+d9/eRMnToRGozEMkzp16hQuX76MqVOnws/Pz+gYNZ3cwJK2Nac
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"text/plain": [
|
|
|
|
|
"<Figure size 1000x600 with 1 Axes>"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"import skfuzzy as fuzz\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определяем диапазон значений для объема торгов\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"volume_range = np.arange(0, 585508801, 10000) \n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для термов\n",
|
2025-02-15 10:29:58 +04:00
|
|
|
|
"# Определение функций принадлежности для термов\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low = fuzz.trapmf(volume_range, [0, 0, 30000000, 30000000]) \n",
|
2025-02-15 10:29:58 +04:00
|
|
|
|
"medium = fuzz.trimf(volume_range, [50000000, 150000000, 200000000]) \n",
|
|
|
|
|
"high = fuzz.trapmf(volume_range, [150000000, 200000000, 585508800, 585508800]) \n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Визуализация функций принадлежности\n",
|
|
|
|
|
"plt.figure(figsize=(10, 6))\n",
|
|
|
|
|
"plt.plot(volume_range, low, label='Низкий (Low)', color='blue')\n",
|
|
|
|
|
"plt.plot(volume_range, medium, label='Средний (Medium)', color='orange')\n",
|
|
|
|
|
"plt.plot(volume_range, high, label='Высокий (High)', color='green')\n",
|
|
|
|
|
"plt.title('Функции принадлежности для объема торгов')\n",
|
|
|
|
|
"plt.xlabel('Объем торгов')\n",
|
|
|
|
|
"plt.ylabel('Принадлежность')\n",
|
|
|
|
|
"plt.ylim(-0.1, 1.1)\n",
|
|
|
|
|
"plt.axhline(0, color='black', lw=0.5)\n",
|
|
|
|
|
"plt.axvline(0, color='black', lw=0.5)\n",
|
|
|
|
|
"plt.legend()\n",
|
|
|
|
|
"plt.grid()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Отображаем график\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"plt.show()"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Формирование базы нечетких правил"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-15 10:29:58 +04:00
|
|
|
|
"execution_count": 4,
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"Нечеткие правила:\n",
|
|
|
|
|
"Если Цена открытия Низкая И Объем Низкий, Тогда Цена закрытия Низкая.\n",
|
|
|
|
|
"Если Цена открытия Низкая И Объем Средний, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Низкая И Объем Высокий, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Средняя И Объем Низкий, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Средняя И Объем Средний, Тогда Цена закрытия Высокая.\n",
|
|
|
|
|
"Если Цена открытия Средняя И Объем Высокий, Тогда Цена закрытия Высокая.\n",
|
|
|
|
|
"Если Цена открытия Высокая И Объем Низкий, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Высокая И Объем Средний, Тогда Цена закрытия Высокая.\n",
|
|
|
|
|
"Если Цена открытия Высокая И Объем Высокий, Тогда Цена закрытия Высокая.\n"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2025-02-15 10:29:58 +04:00
|
|
|
|
"image/png": "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
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"text/plain": [
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"<Figure size 1000x1200 with 3 Axes>"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd5xcZb348c/znHOmbEtvQOi9FwURadKb7V4LeC+IiFeKInj1AiqIBVRE9CrgDxBQ6XARUIqEkAChQ+ihJNnd9GzfnT5zyvP7YwvZ7CbZ3ezsmZn9vl+vvF7ZmTPnfGf27Mx8z/M8368yxhiEEEIIIYQQQggx6nTYAQghhBBCCCGEEJVKkm4hhBBCCCGEEKJIJOkWQgghhBBCCCGKRJJuIYQQQgghhBCiSCTpFkIIIYQQQgghikSSbiGEEEIIIYQQokgk6RZCCCGEEEIIIYpEkm4hhBBCCCGEEKJIJOkWQgghhBBCCCGKRJJuIYQQQgghhBCiSCTpFkKIcei2225DKdXv3/Tp0znyyCN57LHHwg5PCCGEEKJi2GEHIIQQIjw//elP2W677TDG0NTUxG233caJJ57IP/7xD04++eSwwxNCCCGEKHuSdAshxDh2wgkn8LGPfazv57POOosZM2Zw1113SdIthBBCCDEKZHq5EEKIPhMnTiQej2PbH12TbWxsRCnFbbfd1m/b8847D6UUX/va1/pue+CBBzjwwAOZPHky8XicXXfdlV/96lcYYwCYN28eSin+/ve/Dzj2nXfeiVKKF154AYC33nqLr33ta2y//fbEYjFmzpzJ17/+ddra2gaNfdtttx0wZV4pxfz58/tts268APfddx9KKbbddtu+2z744AM+/elPM3PmTKLRKLNnz+Zb3/oW7e3tfdsUCgUuu+wyDjjgACZMmEB1dTWHHnoo8+bN67f/3tfvN7/5zYCY99xzT4444oh+tx1xxBEDbnvllVf6ns+6UqkU3/ve99h+++1xHKff825tbR30dVr3OHvuueeA23/zm9+glKKxsbHf7Y899hiHHnoo1dXV1NbWctJJJ/Huu+/222aw13f+/PkDfg8AL730EscffzwTJkygqqqKww8/nOeee67v/p/85CeD/j4H+90O9pr94he/QGvNnXfe2e85D+W1vfXWW1FKccstt/Tb9sorr0QpxaOPPjrgdVv/ddhY3OtSSnH++edzxx13sMsuuxCLxTjggAN45pln+m23bNkyzj33XHbZZRfi8ThTpkzhi1/84oDf0/pLR6qqqthrr724+eab+233ta99rd85D7BixQri8figv//e3+P6/9bfhxBCiIFkpFsIIcaxrq4uWltbMcbQ3NzMH/7wB1KpFP/xH/+x0cctWbKEm266acDtiUSCgw46iDPOOAPHcXj88ce5+OKLsW2b733vexxxxBHMnj2bO+64g89//vP9HnvHHXewww47cPDBBwMwZ84c6uvrOfPMM5k5cybvvvsuN954I++++y4vvvjigOQF4NBDD+Wb3/wmAO+99x5XXnnlRp+H53n88Ic/HHB7Op1mq6224pRTTqGuro533nmH6667jlWrVvGPf/yj77nefPPNnHrqqZx99tkkk0n+/Oc/c9xxx/Hyyy+z7777bvTYw/E///M/g97+/e9/nz/96U+cddZZHHLIITiOwwMPPDDoRY3N8be//Y0zzjiD4447jl/96ldkMhluuOEGPvWpT/H6668PO/F66qmnOOGEEzjggAO4/PLL0Vpz66238ulPf5pnn32WAw88kC984QvsuOOOfY+58MIL2W233fp+vwC77bbboPu/9dZb+dGPfsQ111zDaaedttFYBnttzzzzTB544AEuuugijjnmGGbPns3bb7/NFVdcwVlnncWJJ564yee477778r3vfa/fbX/961+ZM2fOgG2ffvpp7rnnHr7zne8QjUa5/vrrOf7443n55Zf7Loy88sorPP/883zlK19hq622orGxkRtuuIEjjjiCRYsWUVVV1W+f1157LVOnTiWRSHDLLbdw9tlns+2223L00UdvMObLLruMXC630ed16aWX9r3uN954I8uXL9/kayGEEOOeEUIIMe7ceuutBhjwLxqNmttuu63ftg0NDQYwt956a99tX/rSl8yee+5pZs+ebc4444yNHmv33Xc3J598ct/Pl1xyiYlGo6azs7PvtubmZmPbtrn88sv7bstkMgP2dddddxnAPPPMMwPu23LLLc2ZZ57Z9/O8efMMYObNm9d32zbbbNMv3uuvv95Eo1Fz5JFHmm222Wajz+Pcc881NTU1fT97nmfy+Xy/bTo6OsyMGTPM17/+9b7bel+/q6++esA+99hjD3P44Yf3u+3www/vd9ujjz5qAHP88ceb9T+2Z82aZY477rh+t11++eUGMC0tLRt9PocffrjZY489Btx+9dVXG8A0NDQYY4xJJpNm4sSJ5uyzz+633dq1a82ECRP63b7ddtuZ008/vd926/8egiAwO+20kznuuONMEAR922UyGbPddtuZY445ZtB41//drf9cel+zRx55xNi2bb73ve9tdDtjNv7arlmzxkyePNkcc8wxJp/Pm/32289svfXWpqura9AY1o/1pJNOGnD7eeedN+A4vX97r776at9ty5YtM7FYzHz+85/vu22wv4cXXnjBAOavf/1r3229f9u9vz9jjPnwww8NYH7961/33XbGGWf0O+ffeecdo7U2J5xwwoDHG2PMnDlzDGCefvrpDe5DCCHE4GR6uRBCjGPXXXcdc+bMYc6cOdx+++0ceeSRfOMb3+CBBx7Y4GNee+017rvvPq666iq0HvxjpLW1lZUrV3LbbbexZMkSDjvssL77Tj/9dPL5PPfff3/fbffccw+e5/UbYY/H433/z+VytLa28olPfAKAhQsXDjhmoVAgGo0O+blnMhl++tOfcv7557P11lsPuk1XVxdNTU3MnTuXRx55pN/zsCyLSCQCQBAEtLe343keH/vYxwaNbySMMVxyySX827/9GwcddNCA+5PJJFOmTBnx/n3fp7W1td+/TCbTb5s5c+bQ2dnJqaee2m87y7I46KCD+k2nnz59OitXrtzoMd944w0WL17MaaedRltbW9/+0uk0Rx11FM888wxBEIzo+bz88st86Utf4t/+7d+4+uqrN7rtpl7bmTNn9v19HHroobzxxhvccsst1NXVjSi2jTn44IM54IAD+n7eeuut+exnP8u//vUvfN8H+v89uK5LW1sbO+64IxMnThz0fOvo6KC1tZX6+nquvfZaLMvi8MMP32AMl1xyCfvvvz9f/OIXB72/UCgADOtvTAghRDeZXi6EEOPYgQce2K+Q2qmnnsp+++3H+eefz8knn9yXVK7r4osv5tBDD+Xkk0/m/PPPH3B/Lpdj2rRpQPd61UsvvZTvf//7fffvuuuufPzjH+eOO+7grLPOArqnln/iE5/oN524vb2dK664grvvvpvm5uZ+x+jq6hpw3K6uLmpqaob83H/729+Sy+W49NJLueiiiwbd5rjjjuOll14C4Pjjj+eee+7pd/9f/vIXrrnmGt5//31c1+27fbvtthtyHBtzxx138O6773Lvvff2W5vc6+CDD+bvf/87999/f9/08vWT5o15//33+35XG7J48WIAPv3pTw96/7pJ6Cc/+Un+93//l7vvvptPf/rTaK0H/K5693fGGWds8JhdXV1MmjRpSM+h16pVqzjppJNIp9O0tbUNuvxgXZt6bQG+8pWvcPvtt/PII4/wzW9+k6OOOmpYMQ3VTjvtNOC2nXfemUwmQ0tLCzNnziSbzXLVVVdx6623smrVqr46CTD438P+++/f9/9oNMof//hHDjzwwEGPv2DBAv7xj38wd+7cDU4X7+zsBBjW35gQQohuknQLIYToo7XmyCOP5Pe//z2LFy9mjz326Hf/E088wZNPPtlX7GwwkUiEOXPmkMlkePbZZ/nVr37F7Nmz+a//+q++bU4//XQuuOACVq5cST6f58UXX+SPf/xjv/186Utf4vnnn+f73/8+++67LzU1NQRBwPHHHz9gJLS
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"text/plain": [
|
|
|
|
|
"<Figure size 1000x600 with 1 Axes>"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import skfuzzy as fuzz\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"x_open = np.linspace(0, 126, 100) \n",
|
|
|
|
|
"x_volume = np.linspace(0, 585508800, 100) \n",
|
|
|
|
|
"x_close = np.linspace(0, 130, 100) \n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены открытия\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_open = fuzz.trapmf(x_open, [0, 0, 10, 40])\n",
|
|
|
|
|
"medium_open = fuzz.trimf(x_open, [35, 63, 90])\n",
|
|
|
|
|
"high_open = fuzz.trapmf(x_open, [85, 90, 126, 126])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для объема торгов\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_volume = fuzz.trapmf(x_volume, [0, 0, 30000000, 30000000])\n",
|
2025-02-15 10:29:58 +04:00
|
|
|
|
"medium_volume = fuzz.trimf(x_volume, [50000000, 150000000, 200000000])\n",
|
|
|
|
|
"high_volume = fuzz.trapmf(x_volume, [150000000, 200000000, 585508800, 585508800])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены закрытия\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_close = fuzz.trapmf(x_close, [0, 0, 10, 40])\n",
|
|
|
|
|
"medium_close = fuzz.trimf(x_close, [35, 80, 115])\n",
|
|
|
|
|
"high_close = fuzz.trapmf(x_close, [110, 120, 130, 130])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение нечетких правил\n",
|
|
|
|
|
"fuzzy_rules = [\n",
|
|
|
|
|
" (\"Низкая\", \"Низкий\", \"Низкая\"),\n",
|
|
|
|
|
" (\"Низкая\", \"Средний\", \"Средняя\"),\n",
|
|
|
|
|
" (\"Низкая\", \"Высокий\", \"Средняя\"),\n",
|
|
|
|
|
" (\"Средняя\", \"Низкий\", \"Средняя\"),\n",
|
|
|
|
|
" (\"Средняя\", \"Средний\", \"Высокая\"),\n",
|
|
|
|
|
" (\"Средняя\", \"Высокий\", \"Высокая\"),\n",
|
|
|
|
|
" (\"Высокая\", \"Низкий\", \"Средняя\"),\n",
|
|
|
|
|
" (\"Высокая\", \"Средний\", \"Высокая\"),\n",
|
|
|
|
|
" (\"Высокая\", \"Высокий\", \"Высокая\"),\n",
|
|
|
|
|
"]\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Вывод правил\n",
|
|
|
|
|
"print(\"Нечеткие правила:\")\n",
|
|
|
|
|
"for rule in fuzzy_rules:\n",
|
|
|
|
|
" print(f\"Если Цена открытия {rule[0]} И Объем {rule[1]}, Тогда Цена закрытия {rule[2]}.\")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Визуализация функций принадлежности\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"fig, axs = plt.subplots(3, 1, figsize=(10, 12))\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Цена открытия\n",
|
|
|
|
|
"axs[0].plot(x_open, low_open, label='Низкий (Low)', color='blue')\n",
|
|
|
|
|
"axs[0].plot(x_open, medium_open, label='Средний (Medium)', color='green')\n",
|
|
|
|
|
"axs[0].plot(x_open, high_open, label='Высокий (High)', color='red')\n",
|
|
|
|
|
"axs[0].set_title('Функции принадлежности для цены открытия')\n",
|
|
|
|
|
"axs[0].set_xlabel('Цена открытия')\n",
|
|
|
|
|
"axs[0].set_ylabel('Степень принадлежности')\n",
|
|
|
|
|
"axs[0].legend()\n",
|
|
|
|
|
"axs[0].grid()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Объем торгов\n",
|
|
|
|
|
"axs[1].plot(x_volume, low_volume, label='Низкий (Low)', color='blue')\n",
|
|
|
|
|
"axs[1].plot(x_volume, medium_volume, label='Средний (Medium)', color='orange')\n",
|
|
|
|
|
"axs[1].plot(x_volume, high_volume, label='Высокий (High)', color='green')\n",
|
|
|
|
|
"axs[1].set_title('Функции принадлежности для объема торгов')\n",
|
|
|
|
|
"axs[1].set_xlabel('Объем торгов')\n",
|
|
|
|
|
"axs[1].set_ylabel('Степень принадлежности')\n",
|
|
|
|
|
"axs[1].legend()\n",
|
|
|
|
|
"axs[1].grid()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Цена закрытия\n",
|
|
|
|
|
"axs[2].plot(x_close, low_close, label='Низкая', color='blue')\n",
|
|
|
|
|
"axs[2].plot(x_close, medium_close, label='Средняя', color='green')\n",
|
|
|
|
|
"axs[2].plot(x_close, high_close, label='Высокая', color='red')\n",
|
|
|
|
|
"axs[2].set_title('Функции принадлежности для цены закрытия')\n",
|
|
|
|
|
"axs[2].set_xlabel('Цена закрытия')\n",
|
|
|
|
|
"axs[2].set_ylabel('Степень принадлежности')\n",
|
|
|
|
|
"axs[2].legend()\n",
|
|
|
|
|
"axs[2].grid()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"plt.tight_layout()\n",
|
|
|
|
|
"plt.show()\n",
|
|
|
|
|
"\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"# Визуализация нечетких правил (пример)\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"fig, ax = plt.subplots(figsize=(10, 6))\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"x_rule = np.linspace(0, 126, 100)\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Пример нечеткого вывода для визуализации (примерные значения)\n",
|
|
|
|
|
"for rule in fuzzy_rules:\n",
|
|
|
|
|
" # Определение степени уверенности для каждого правила\n",
|
|
|
|
|
" if rule[0] == \"Низкая\" and rule[1] == \"Низкий\":\n",
|
|
|
|
|
" ax.fill_between(x_open, low_open, low_close, color='lightblue', alpha=0.5, label='Низкий #1')\n",
|
|
|
|
|
" elif rule[0] == \"Низкая\" and rule[1] == \"Средний\":\n",
|
|
|
|
|
" ax.fill_between(x_open, medium_open, medium_close, color='lightgreen', alpha=0.5, label='Средний #2')\n",
|
|
|
|
|
" elif rule[0] == \"Низкая\" and rule[1] == \"Высокий\":\n",
|
|
|
|
|
" ax.fill_between(x_open, low_open, medium_close, color='lightcoral', alpha=0.5, label='Высокий #3')\n",
|
|
|
|
|
" elif rule[0] == \"Средняя\" and rule[1] == \"Низкий\":\n",
|
|
|
|
|
" ax.fill_between(x_open, medium_open, medium_close, color='orange', alpha=0.5, label='Низкий #4')\n",
|
|
|
|
|
" elif rule[0] == \"Высокая\" and rule[1] == \"Высокий\":\n",
|
|
|
|
|
" ax.fill_between(x_open, high_open, high_close, color='salmon', alpha=0.5, label='Высокий #5')\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"ax.set_title('Визуализация нечетких правил')\n",
|
|
|
|
|
"ax.set_xlabel('Цена открытия')\n",
|
|
|
|
|
"ax.set_ylabel('Цена закрытия')\n",
|
|
|
|
|
"ax.legend()\n",
|
|
|
|
|
"ax.grid()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"plt.tight_layout()\n",
|
|
|
|
|
"plt.show()"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Оценка качества полученной нечеткой системы, используя метрики регрессии"
|
|
|
|
|
]
|
|
|
|
|
},
|
2025-02-08 21:28:06 +04:00
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-15 10:29:58 +04:00
|
|
|
|
"execution_count": 7,
|
2025-02-08 21:28:06 +04:00
|
|
|
|
"metadata": {},
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"Цена открытия | Объем торгов | Фактическая цена закрытия | Полученная цена закрытия \n",
|
|
|
|
|
"============================================================================================\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"50 | 150000000 | 60 | 41.07 \n",
|
2025-02-15 10:29:58 +04:00
|
|
|
|
"100 | 300000000 | 120 | 61.11 \n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"85 | 450000000 | 110 | 5.24 \n",
|
|
|
|
|
"40 | 100000000 | 30 | 13.69 \n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
2025-02-15 10:29:58 +04:00
|
|
|
|
"Средняя абсолютная ошибка (MAE): 49.72\n",
|
|
|
|
|
"Среднеквадратичная ошибка (RMSE): 61.38\n"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import skfuzzy as fuzz\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определяем диапазоны значений для входных переменных\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"x_open = np.linspace(0, 126, 100) # Цена открытия\n",
|
|
|
|
|
"x_volume = np.linspace(0, 585508800, 100) # Объем торгов\n",
|
|
|
|
|
"x_close = np.linspace(0, 130, 100) # Цена закрытия\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены открытия\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_open = fuzz.trapmf(x_open, [0, 0, 10, 40])\n",
|
|
|
|
|
"medium_open = fuzz.trimf(x_open, [35, 63, 90])\n",
|
|
|
|
|
"high_open = fuzz.trapmf(x_open, [85, 90, 126, 126])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для объема торгов\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_volume = fuzz.trapmf(x_volume, [0, 0, 30000000, 30000000])\n",
|
2025-02-15 10:29:58 +04:00
|
|
|
|
"medium_volume = fuzz.trimf(x_volume, [30000000, 150000000, 250000000])\n",
|
|
|
|
|
"high_volume = fuzz.trapmf(x_volume, [200000000, 400000000, 585508800, 585508800])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены закрытия\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"low_close = fuzz.trapmf(x_close, [0, 0, 10, 40])\n",
|
|
|
|
|
"medium_close = fuzz.trimf(x_close, [35, 80, 115])\n",
|
|
|
|
|
"high_close = fuzz.trapmf(x_close, [110, 120, 130, 130])\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"# Создаем тестовые данные (цена открытия, объем, эталонная цена закрытия)\n",
|
|
|
|
|
"test_data = [\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
" (50, 150000000, 60), # Низкая цена открытия, средний объем и цена закрытия\n",
|
|
|
|
|
" (100, 300000000, 120), # Высокая цена открытия, средний объем и высокая цена закрытия\n",
|
|
|
|
|
" (85, 450000000, 110), # Высокая цена открытия и высокая цена закрытия\n",
|
|
|
|
|
" (40, 100000000, 30) # Средняя цена открытия и низкий объем\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"]\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Функция для вычисления нечеткой оценки\n",
|
|
|
|
|
"def fuzzy_inference(open_price, volume):\n",
|
|
|
|
|
" open_low = fuzz.interp_membership(x_open, low_open, open_price)\n",
|
|
|
|
|
" open_medium = fuzz.interp_membership(x_open, medium_open, open_price)\n",
|
|
|
|
|
" open_high = fuzz.interp_membership(x_open, high_open, open_price)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" volume_low = fuzz.interp_membership(x_volume, low_volume, volume)\n",
|
|
|
|
|
" volume_medium = fuzz.interp_membership(x_volume, medium_volume, volume)\n",
|
|
|
|
|
" volume_high = fuzz.interp_membership(x_volume, high_volume, volume)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
" close_low = np.fmin(open_low, volume_low)\n",
|
|
|
|
|
" close_medium = np.fmin(open_medium, volume_medium)\n",
|
|
|
|
|
" close_high = np.fmin(open_high, volume_high)\n",
|
|
|
|
|
"\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
" close0 = fuzz.defuzz(x_close, low_close, 'centroid') * close_low if close_low > 0 else 0\n",
|
|
|
|
|
" close1 = fuzz.defuzz(x_close, medium_close, 'centroid') * close_medium if close_medium > 0 else 0\n",
|
|
|
|
|
" close2 = fuzz.defuzz(x_close, high_close, 'centroid') * close_high if close_high > 0 else 0\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
" return max(close0, close1, close2)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Список для хранения результатов\n",
|
|
|
|
|
"results = []\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Оценка системы на тестовом наборе данных\n",
|
|
|
|
|
"for open_price, volume, actual_close in test_data:\n",
|
|
|
|
|
" inferred_close = fuzzy_inference(open_price, volume)\n",
|
|
|
|
|
" results.append((open_price, volume, actual_close, inferred_close))\n",
|
|
|
|
|
"\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"# Вывод результатов\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"print(f\"{'Цена открытия':<18} | {'Объем торгов':<10} | {'Фактическая цена закрытия':<30} | {'Полученная цена закрытия':<30}\")\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"print(\"=\" * 92)\n",
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"\n",
|
|
|
|
|
"for open_price, volume, actual_close, inferred_close in results:\n",
|
|
|
|
|
" print(f\"{open_price:<18} | {volume:<10} | {actual_close:<30} | {inferred_close:<30.2f}\")\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Вычисление метрик качества\n",
|
|
|
|
|
"actual_closes = [actual for _, _, actual, _ in results]\n",
|
|
|
|
|
"inferred_closes = [inferred for _, _, _, inferred in results]\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"mae = np.mean(np.abs(np.array(actual_closes) - np.array(inferred_closes)))\n",
|
|
|
|
|
"rmse = np.sqrt(np.mean((np.array(actual_closes) - np.array(inferred_closes)) ** 2))\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Вывод метрик\n",
|
|
|
|
|
"print(f\"\\nСредняя абсолютная ошибка (MAE): {mae:.2f}\")\n",
|
2025-02-13 21:31:43 +04:00
|
|
|
|
"print(f\"Среднеквадратичная ошибка (RMSE): {rmse:.2f}\")"
|
2025-02-08 21:28:30 +04:00
|
|
|
|
]
|
2025-02-08 21:28:06 +04:00
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"metadata": {
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"kernelspec": {
|
|
|
|
|
"display_name": "aimenv",
|
|
|
|
|
"language": "python",
|
|
|
|
|
"name": "python3"
|
|
|
|
|
},
|
2025-02-08 21:28:06 +04:00
|
|
|
|
"language_info": {
|
2025-02-08 21:28:30 +04:00
|
|
|
|
"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"
|
2025-02-08 21:28:06 +04:00
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"nbformat": 4,
|
|
|
|
|
"nbformat_minor": 2
|
|
|
|
|
}
|