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",
|
|
|
|
|
"execution_count": 6,
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"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": 6,
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "execute_result"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import pandas as pd \n",
|
|
|
|
|
"df = pd.read_csv(\"./static/csv/Starbucks Dataset.csv\")\n",
|
|
|
|
|
"df"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"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": [
|
|
|
|
|
"Термы: \n",
|
|
|
|
|
"Низкий (Low)\n",
|
|
|
|
|
"Средний (Medium)\n",
|
|
|
|
|
"Высокий (High)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Параметры:\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Низкий (Low):\n",
|
|
|
|
|
"Нижняя граница: 0\n",
|
|
|
|
|
"Средняя граница: 3000\n",
|
|
|
|
|
"Верхняя граница: 6000\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Средний (Medium):\n",
|
|
|
|
|
"Нижняя граница: 4000\n",
|
|
|
|
|
"Средняя граница: 8000\n",
|
|
|
|
|
"Верхняя граница: 10000\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Высокий (High):\n",
|
|
|
|
|
"Нижняя граница: 9000\n",
|
|
|
|
|
"Средняя граница: 10000\n",
|
|
|
|
|
"Верхняя граница: 12000"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 7,
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
|
|
|
|
"image/png": "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
|
|
|
|
|
"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",
|
|
|
|
|
"volume_range = np.arange(0, 12000, 1)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для термов\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Низкий (Low)\n",
|
|
|
|
|
"low = fuzz.trapmf(volume_range, [0, 0, 3000, 6000])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Средний (Medium)\n",
|
|
|
|
|
"medium = fuzz.trimf(volume_range, [4000, 8000, 10000])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Высокий (High)\n",
|
|
|
|
|
"high = fuzz.trapmf(volume_range, [9000, 10000, 12000, 12000])\n",
|
|
|
|
|
"\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",
|
|
|
|
|
"plt.show()"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"source": [
|
|
|
|
|
"## Формирование базы нечетких правил"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": 11,
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"name": "stdout",
|
|
|
|
|
"output_type": "stream",
|
|
|
|
|
"text": [
|
|
|
|
|
"Нечеткие правила:\n",
|
|
|
|
|
"Если Цена открытия Низкая И Объем Низкий, Тогда Цена закрытия Низкая.\n",
|
|
|
|
|
"Если Цена открытия Низкая И Объем Средний, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Низкая И Объем Высокий, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Средняя И Объем Низкий, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Средняя И Объем Средний, Тогда Цена закрытия Высокая.\n",
|
|
|
|
|
"Если Цена открытия Средняя И Объем Высокий, Тогда Цена закрытия Высокая.\n",
|
|
|
|
|
"Если Цена открытия Высокая И Объем Низкий, Тогда Цена закрытия Средняя.\n",
|
|
|
|
|
"Если Цена открытия Высокая И Объем Средний, Тогда Цена закрытия Высокая.\n",
|
|
|
|
|
"Если Цена открытия Высокая И Объем Высокий, Тогда Цена закрытия Высокая.\n"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
|
|
|
|
"image/png": "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
|
|
|
|
|
"text/plain": [
|
|
|
|
|
"<Figure size 600x1200 with 3 Axes>"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA90AAAJOCAYAAACqS2TfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjkuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8hTgPZAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdd5xb1Zn/8c85t6h4insDgymhdyd0MIRiILApu5sE9rcQQsiGkkY2u0ASCGlsQuqGQJYQIAmY5tC7Q+i9h2ZjY+NepqhrJN1yfn+MPTDM2J6imSvNPO/Xyy8YjXT1lUaj0XPPOc9RxhiDEEIIIYQQQgghqk5HHUAIIYQQQgghhBippOgWQgghhBBCCCGGiBTdQgghhBBCCCHEEJGiWwghhBBCCCGEGCJSdAshhBBCCCGEEENEim4hhBBCCCGEEGKISNEthBBCCCGEEEIMESm6hRBCCCGEEEKIISJFtxBCCCGEEEIIMUSk6BZCCCGEEEIIIYaIFN1CCDEKXXfddSiluv2bPHkyRx55JPfff3/U8YQQQgghRgw76gBCCCGi84Mf/IDtttsOYwzr1q3juuuu44QTTuDuu+/mxBNPjDqeEEIIIUTdk6JbCCFGseOPP56PfvSjXV+fccYZTJkyhRtvvFGKbiGEEEKIKpDp5UIIIbqMHTuWRCKBbb9/Tva9995DKcV1113X7brnnHMOSim+8IUvdF122223sf/++zN+/HgSiQS77LILP/3pTzHGAPDII4+glOL222/vcd9z585FKcUzzzwDwD/+8Q++8IUvsP322xOPx5k6dSpf/OIXaWtr6zX7zJkze0yZV0rx6KOPdrvOB/MC3HrrrSilmDlzZtdlCxcu5OMf/zhTp04lFosxY8YMvvKVr9De3t51nUqlwkUXXcSsWbNobm5mzJgxHHbYYTzyyCPdjr/x+fv5z3/eI/Mee+zBEUcc0e2yI444osdlL7zwQtfj+aB8Ps+3vvUttt9+exzH6fa4W1tbe32ePng/e+yxR4/Lf/7zn6OU4r333ut2+f33389hhx3GmDFjaGxs5BOf+ARvvvlmt+v09vw++uijPX4OAM899xzHHXcczc3NJJNJZs+ezVNPPdX1/e9///u9/jx7+9n29pz9+Mc/RmvN3Llzuz3mvjy31157LUoprrnmmm7X/clPfoJSivvuu6/H8/bh52FzuT9IKcW5557LDTfcwM4770w8HmfWrFk8/vjj3a63bNkyzj77bHbeeWcSiQQTJkzgX//1X3v8nD68dCSZTLLnnnty9dVXd7veF77whW6veYAVK1aQSCR6/flv/Dl++N+HjyGEEKInGekWQohRLJPJ0NraijGG9evX89vf/pZ8Ps//+3//b7O3W7x4MX/4wx96XJ7NZjnggAM47bTTcByHBx54gPPPPx/btvnWt77FEUccwYwZM7jhhhv49Kc/3e22N9xwAzvssAMHHXQQAPPnz2fJkiWcfvrpTJ06lTfffJOrrrqKN998k2effbZH8QJw2GGH8eUvfxmAt99+m5/85CebfRy+7/Od73ynx+WFQoGtt96ak046iaamJt544w1+97vfsWrVKu6+++6ux3r11Vdz8sknc+aZZ5LL5fjjH//InDlzeP7559lnn302e9/98d///d+9Xv7tb3+b3//+95xxxhkccsghOI7Dbbfd1utJjcH4y1/+wmmnncacOXP46U9/SrFY5Morr+TQQw/llVde6Xfh9fe//53jjz+eWbNmcfHFF6O15tprr+XjH/84TzzxBPvvvz+f+cxn2HHHHbtu881vfpNdd9216+cLsOuuu/Z6/GuvvZbvfve7/OIXv+CUU07ZbJbentvTTz+d2267jfPOO49jjjmGGTNm8Prrr3PJJZdwxhlncMIJJ2zxMe6zzz5861vf6nbZn//8Z+bPn9/juo899hg333wzX/va14jFYlxxxRUcd9xxPP/8810nRl544QWefvppPv/5z7P11lvz3nvvceWVV3LEEUfw1ltvkUwmux3zV7/6FRMnTiSbzXLNNddw5plnMnPmTI4++uhNZr7ooosolUqbfVwXXnhh1/N+1VVXsXz58i0+F0IIMeoZIYQQo861115rgB7/YrGYue6667pdd+nSpQYw1157bddln/3sZ80ee+xhZsyYYU477bTN3tduu+1mTjzxxK6vL7jgAhOLxUw6ne66bP369ca2bXPxxRd3XVYsFnsc68YbbzSAefzxx3t8b6uttjKnn35619ePPPKIAcwjjzzSddm2227bLe8VV1xhYrGYOfLII82222672cdx9tlnm4aGhq6vfd835XK523VSqZSZMmWK+eIXv9h12cbn77LLLutxzN13393Mnj2722WzZ8/udtl9991nAHPccceZD//ZnjZtmpkzZ063yy6++GIDmJaWls0+ntmzZ5vdd9+9x+WXXXaZAczSpUuNMcbkcjkzduxYc+aZZ3a73tq1a01zc3O3y7fbbjtz6qmndrveh38OYRiaj3zkI2bOnDkmDMOu6xWLRbPddtuZY445pte8H/7ZffixbHzO7r33XmPbtvnWt7612esZs/nnds2aNWb8+PHmmGOOMeVy2ey7775mm222MZlMptcMH876iU98osfl55xzTo/72fi79+KLL3ZdtmzZMhOPx82nP/3prst6+3145plnDGD+/Oc/d1228Xd748/PGGPeeecdA5if/exnXZeddtpp3V7zb7zxhtFam+OPP77H7Y0xZv78+QYwjz322CaPIYQQoncyvVwIIUax3/3ud8yfP5/58+dz/fXXc+SRR/KlL32J2267bZO3eemll7j11lu59NJL0br3PyOtra2sXLmS6667jsWLF3P44Yd3fe/UU0+lXC4zb968rstuvvlmfN/vNsKeSCS6/r9UKtHa2sqBBx4IwMsvv9zjPiuVCrFYrM+PvVgs8oMf/IBzzz2XbbbZptfrZDIZ1q1bx8MPP8y9997b7XFYloXrugCEYUh7ezu+7/PRj36013wDYYzhggsu4J//+Z854IADenw/l8sxYcKEAR8/CAJaW1u7/SsWi92uM3/+fNLpNCeffHK361mWxQEHHNBtOv3kyZNZuXLlZu/z1VdfZdGiRZxyyim0tbV1Ha9QKHDUUUfx+OOPE4bhgB7P888/z2c/+1n++Z//mcsuu2yz193Sczt16tSu34/DDjuMV199lWuuuYampqYBZducgw46iFmzZnV9vc022/DJT36SBx98kCAIgO6/D57n0dbWxo477sjYsWN7fb2lUilaW1tZsmQJv/rVr7Asi9mzZ28ywwUXXMB+++3Hv/7rv/b6/UqlAtCv3zEhhBCdZHq5EEKMYvvvv3+3Rmonn3wy++67L+eeey4nnnhiV1H5Qeeffz6HHXYYJ554Iueee26P75dKJSZNmgR0rle98MIL+fa3v931/V122YWPfexj3HDDDZxxxhlA59TyAw88sNt04vb2di655BJuuukm1q9f3+0+MplMj/vNZDI0NDT0+bH/8pe/pFQqceGFF3Leeef1ep05c+bw3HPPAXDcccdx8803d/v+n/70J37xi1+wYMECPM/runy77bbrc47NueGGG3jzzTe55ZZbuq1N3uiggw7i9ttvZ968eV3Tyz9cNG/OggULun5Wm7Jo0SIAPv7xj/f6/Q8WoQcffDD/+7//y0033cTHP/5xtNY9flYbj3faaadt8j4zmQzjxo3r02PYaNWqVXziE5+gUCjQ1tbW6/KDD9rScwvw+c9/nuuvv557772XL3/5yxx11FH9ytRXH/nIR3pcttNOO1EsFmlpaWHq1Kl0dHRw6aWXcu2117Jq1aquPgnQ++/Dfvvt1/X/sViMyy+/nP3337/X+3/yySe5++67efjhhzc5XTydTgP063dMCCFEJym6hRBCdNFac+SRR/Kb3/yGRYsWsfvuu3f7/kMPPcTf/va3rmZnvXFdl/nz51MsFnniiSf46U9/yowZM/iP//iPruuceuqpfP3rX2flypWUy2WeffZZLr/88m7H+exnP8vTTz/Nt7/9bfbZZx8aGhoIw5Djjju
|
|
|
|
|
"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",
|
|
|
|
|
"# Определяем диапазоны значений для входных переменных\n",
|
|
|
|
|
"x_open = np.linspace(0, 10000, 100) # Цена открытия\n",
|
|
|
|
|
"x_volume = np.arange(0, 5001, 1) # Объем торгов\n",
|
|
|
|
|
"x_close = np.linspace(0, 12000, 100) # Цена закрытия\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены открытия\n",
|
|
|
|
|
"low_open = fuzz.trapmf(x_open, [0, 0, 2500, 4000])\n",
|
|
|
|
|
"medium_open = fuzz.trimf(x_open, [3000, 6000, 9000])\n",
|
|
|
|
|
"high_open = fuzz.trapmf(x_open, [8000, 9000, 10000, 10000])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для объема торгов\n",
|
|
|
|
|
"low_volume = fuzz.trapmf(x_volume, [0, 0, 1000, 2000])\n",
|
|
|
|
|
"medium_volume = fuzz.trimf(x_volume, [1500, 2500, 3500])\n",
|
|
|
|
|
"high_volume = fuzz.trapmf(x_volume, [3000, 4000, 5000, 5000])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены закрытия\n",
|
|
|
|
|
"low_close = fuzz.trapmf(x_close, [0, 0, 3500, 5500])\n",
|
|
|
|
|
"medium_close = fuzz.trimf(x_close, [4000, 8000, 11000])\n",
|
|
|
|
|
"high_close = fuzz.trapmf(x_close, [10000, 11000, 12000, 12000])\n",
|
|
|
|
|
"\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",
|
|
|
|
|
"fig, axs = plt.subplots(3, 1, figsize=(6, 12))\n",
|
|
|
|
|
"\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",
|
|
|
|
|
"# Визуализация нечетких правил\n",
|
|
|
|
|
"fig, ax = plt.subplots(figsize=(10, 6))\n",
|
|
|
|
|
"\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-08 21:28:30 +04:00
|
|
|
|
"execution_count": 14,
|
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",
|
|
|
|
|
"2500 | 800 | 3500 | 2333.77 \n",
|
|
|
|
|
"5000 | 1500 | 7000 | 7334.15 \n",
|
|
|
|
|
"9000 | 3500 | 11000 | 10732.93 \n",
|
|
|
|
|
"4000 | 1000 | 5000 | 7334.15 \n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Средняя абсолютная ошибка (MAE): 1025.40\n",
|
|
|
|
|
"Среднеквадратичная ошибка (RMSE): 1322.06\n"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import skfuzzy as fuzz\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определяем диапазоны значений для входных переменных\n",
|
|
|
|
|
"x_open = np.linspace(0, 10000, 100) # Цена открытия\n",
|
|
|
|
|
"x_volume = np.arange(0, 5001, 1) # Объем торгов\n",
|
|
|
|
|
"x_close = np.linspace(0, 12000, 100) # Цена закрытия\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены открытия\n",
|
|
|
|
|
"low_open = fuzz.trapmf(x_open, [0, 0, 2000, 4000])\n",
|
|
|
|
|
"medium_open = fuzz.trimf(x_open, [3000, 6000, 8000])\n",
|
|
|
|
|
"high_open = fuzz.trapmf(x_open, [7000, 9000, 10000, 10000])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для объема торгов\n",
|
|
|
|
|
"low_volume = fuzz.trapmf(x_volume, [0, 0, 500, 1000])\n",
|
|
|
|
|
"medium_volume = fuzz.trimf(x_volume, [800, 2000, 3000])\n",
|
|
|
|
|
"high_volume = fuzz.trapmf(x_volume, [2500, 3500, 5000, 5000])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Определение функций принадлежности для цены закрытия\n",
|
|
|
|
|
"low_close = fuzz.trapmf(x_close, [0, 0, 3000, 6000])\n",
|
|
|
|
|
"medium_close = fuzz.trimf(x_close, [4000, 8000, 10000])\n",
|
|
|
|
|
"high_close = fuzz.trapmf(x_close, [9000, 10000, 12000, 12000])\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Создаем тестовые данные (цена открытия, объем, эталонная цена закрытия)\n",
|
|
|
|
|
"test_data = [\n",
|
|
|
|
|
" (2500, 800, 3500), # Низкая цена открытия и объем\n",
|
|
|
|
|
" (5000, 1500, 7000), # Средняя цена открытия и объем\n",
|
|
|
|
|
" (9000, 3500, 11000), # Высокая цена открытия и объем\n",
|
|
|
|
|
" (4000, 1000, 5000), # Средняя цена открытия и низкий объем\n",
|
|
|
|
|
"]\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Функция для вычисления нечеткой оценки\n",
|
|
|
|
|
"def fuzzy_inference(open_price, volume):\n",
|
|
|
|
|
" # Определяем степень принадлежности\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",
|
|
|
|
|
" # Применяем правила\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",
|
|
|
|
|
" # Вычисление выходных значений с учетом ненулевых областей\n",
|
|
|
|
|
" close0 = fuzz.defuzz(x_close, low_close * close_low, 'centroid') if close_low > 0 else 0\n",
|
|
|
|
|
" close1 = fuzz.defuzz(x_close, medium_close * close_medium, 'centroid') if close_medium > 0 else 0\n",
|
|
|
|
|
" close2 = fuzz.defuzz(x_close, high_close * close_high, 'centroid') if close_high > 0 else 0\n",
|
|
|
|
|
"\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",
|
|
|
|
|
"# Вывод результатов с более структурированным оформлением\n",
|
|
|
|
|
"print(f\"{'Цена открытия':<18} | {'Объем торгов':<10} | {'Фактическая цена закрытия':<30} | {'Полученная цена закрытия':<30}\")\n",
|
|
|
|
|
"print(\"=\" * 92) # Строка-разделитель\n",
|
|
|
|
|
"\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",
|
|
|
|
|
"print(f\"Среднеквадратичная ошибка (RMSE): {rmse:.2f}\")"
|
|
|
|
|
]
|
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
|
|
|
|
|
}
|