AIM-PIbd-31-Masenkin-M-S/lab_7/fuzzy_logic.ipynb

1109 lines
266 KiB
Plaintext
Raw Normal View History

2025-02-07 06:02:14 +04:00
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Датасет: [Tesla Insider Trading](https://www.kaggle.com/datasets/ilyaryabov/tesla-insider-trading).\n",
"\n",
"### Описание датасета:\n",
"\n",
"Датасет представляет собой выборку операций с ценными бумагами компании Tesla, совершённых инсайдерами, и является частью более крупного проекта \"Insider Trading S&P500 Inside Info\". Данные охватывают транзакции с участием крупных акционеров и должностных лиц компании, включая такие операции, как покупка, продажа и опционы, начиная с 10 ноября 2021 года и до 27 июля 2022 года.\n",
"\n",
"---\n",
"\n",
"### Анализ сведений:\n",
"\n",
"**Проблемная область:**\n",
"Проблемная область данного датасета касается анализа инсайдерских сделок в публичных компаниях, а также их влияния на ценообразование акций. Инсайдерские транзакции, совершаемые людьми с доступом к непубличной информации (такими как руководители, крупные акционеры или члены совета директоров), могут быть индикаторами будущих изменений стоимости акций. Исследование таких транзакций помогает понять, как информация внутри компании отражается в действиях ключевых участников, и может выявить паттерны поведения, которые влияют на рынки.\n",
"\n",
"**Актуальность:**\n",
"Анализ инсайдерских сделок становится особенно важным в условиях высокой волатильности рынка и неопределенности. Инвесторы, аналитики и компании используют такие данные, чтобы лучше понимать сигналы от крупных акционеров и должностных лиц. Действия инсайдеров, такие как покупки и продажи акций, нередко рассматриваются как индикаторы доверия к компании, что может оказывать значительное влияние на рыночные ожидания и прогнозы.\n",
"\n",
"**Объекты наблюдений:**\n",
"Объектами наблюдений в датасете являются инсайдеры компании Tesla — лица, имеющие значительное влияние на управление и информацию компании. Каждый объект характеризуется различными параметрами, включая должность, тип транзакции, количество акций и общую стоимость сделок.\n",
"\n",
"**Атрибуты объектов:**\n",
"- Insider Trading: ФИО лица, совершившего транзакцию.\n",
"- Relationship: Должность или статус данного лица в компании Tesla.\n",
"- Date: Дата завершения транзакции.\n",
"- Transaction: Тип транзакции.\n",
"- Cost: Цена одной акции на момент совершения транзакции.\n",
"- Shares: Количество акций, участвующих в транзакции.\n",
"- Value ($): Общая стоимость транзакции в долларах США.\n",
"- Shares Total: Общее количество акций, принадлежащих этому лицу после завершения данной транзакции.\n",
"- SEC Form 4: Дата записи транзакции в форме SEC Form 4, обязательной для отчётности о сделках инсайдеров.\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Выгрузка данных из файла в DataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"from pandas import DataFrame\n",
"\n",
"\n",
"df: DataFrame = pd.read_csv(\"..//static//csv//TSLA.csv\")\n",
"\n",
"# Преобразование типов данных\n",
"df[\"Insider Trading\"] = df[\"Insider Trading\"].astype(\"category\") # Преобразование в категорию\n",
"df[\"Relationship\"] = df[\"Relationship\"].astype(\"category\") # Преобразование в категорию\n",
"df[\"Transaction\"] = df[\"Transaction\"].astype(\"category\") # Преобразование в категорию\n",
"df[\"Cost\"] = pd.to_numeric(df[\"Cost\"], errors=\"coerce\") # Преобразование в float\n",
"df[\"Shares\"] = pd.to_numeric(df[\"Shares\"].str.replace(\",\", \"\"), errors=\"coerce\") # Преобразование в float с удалением запятых\n",
"df[\"Value ($)\"] = pd.to_numeric(df[\"Value ($)\"].str.replace(\",\", \"\"), errors=\"coerce\") # Преобразование в float с удалением запятых\n",
"df[\"Shares Total\"] = pd.to_numeric(df[\"Shares Total\"].str.replace(\",\", \"\"), errors=\"coerce\") # Преобразование в float с удалением запятых"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Краткая информация о DataFrame:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 156 entries, 0 to 155\n",
"Data columns (total 9 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 Insider Trading 156 non-null category\n",
" 1 Relationship 156 non-null category\n",
" 2 Date 156 non-null object \n",
" 3 Transaction 156 non-null category\n",
" 4 Cost 156 non-null float64 \n",
" 5 Shares 156 non-null int64 \n",
" 6 Value ($) 156 non-null int64 \n",
" 7 Shares Total 156 non-null int64 \n",
" 8 SEC Form 4 156 non-null object \n",
"dtypes: category(3), float64(1), int64(3), object(2)\n",
"memory usage: 8.6+ KB\n"
]
},
{
"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>count</th>\n",
" <th>mean</th>\n",
" <th>std</th>\n",
" <th>min</th>\n",
" <th>25%</th>\n",
" <th>50%</th>\n",
" <th>75%</th>\n",
" <th>max</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Cost</th>\n",
" <td>156.0</td>\n",
" <td>4.787856e+02</td>\n",
" <td>4.489229e+02</td>\n",
" <td>0.0</td>\n",
" <td>50.5225</td>\n",
" <td>240.225</td>\n",
" <td>9.341075e+02</td>\n",
" <td>1.171040e+03</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Shares</th>\n",
" <td>156.0</td>\n",
" <td>5.404666e+05</td>\n",
" <td>1.530835e+06</td>\n",
" <td>121.0</td>\n",
" <td>3500.0000</td>\n",
" <td>10500.000</td>\n",
" <td>3.017978e+05</td>\n",
" <td>1.192000e+07</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Value ($)</th>\n",
" <td>156.0</td>\n",
" <td>1.818582e+08</td>\n",
" <td>4.131734e+08</td>\n",
" <td>0.0</td>\n",
" <td>271008.0000</td>\n",
" <td>2026823.000</td>\n",
" <td>1.487132e+08</td>\n",
" <td>2.278695e+09</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Shares Total</th>\n",
" <td>156.0</td>\n",
" <td>3.347679e+07</td>\n",
" <td>9.553593e+07</td>\n",
" <td>49.0</td>\n",
" <td>25103.5000</td>\n",
" <td>73488.000</td>\n",
" <td>1.507274e+06</td>\n",
" <td>4.554674e+08</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" count mean std min 25% \\\n",
"Cost 156.0 4.787856e+02 4.489229e+02 0.0 50.5225 \n",
"Shares 156.0 5.404666e+05 1.530835e+06 121.0 3500.0000 \n",
"Value ($) 156.0 1.818582e+08 4.131734e+08 0.0 271008.0000 \n",
"Shares Total 156.0 3.347679e+07 9.553593e+07 49.0 25103.5000 \n",
"\n",
" 50% 75% max \n",
"Cost 240.225 9.341075e+02 1.171040e+03 \n",
"Shares 10500.000 3.017978e+05 1.192000e+07 \n",
"Value ($) 2026823.000 1.487132e+08 2.278695e+09 \n",
"Shares Total 73488.000 1.507274e+06 4.554674e+08 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Краткая информация о DataFrame\n",
"df.info()\n",
"\n",
"# Статистическое описание числовых столбцов\n",
"df.describe().transpose()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Выбор входных и выходных переменных:\n",
"\n",
"**Входные переменные:**\n",
"\n",
"На основании анализа датасета можно выделить следующие ключевые параметры, которые могут влиять на принятие решения об изменении стоимости акций:\n",
"- Transaction (Тип транзакции): Категориальная переменная, указывающая на тип операции (Sale, Option Exercise).\n",
"- Cost (Цена акции): Числовая переменная, показывающая стоимость одной акции на момент совершения транзакции.\n",
"- Shares (Количество акций): Числовая переменная, указывающая количество акций в транзакции.\n",
"- Value ($): Числовая переменная, представляющая общую стоимость транзакции.\n",
"\n",
"**Выходная переменная:**\n",
"\n",
"Impact on Stock Price (Влияние на цену акций): Лингвистическая переменная, описывающая потенциальное влияние транзакции на рыночную цену акций Tesla. Может принимать значения: \"Low\", \"Medium\", \"High\".\n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Определение лингвистических переменных:\n",
"\n",
"**Лингвистическая переменная** это переменная, значениями которой являются слова или фразы вместо чисел. Она используется в нечеткой логике и теории нечетких множеств для описания понятий, которые нельзя точно выразить числовыми значениями.\n",
"\n",
"Для каждой переменной определим количество термов, типы и параметры функций принадлежности."
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"from skfuzzy import control as ctrl\n",
"\n",
"\n",
"transaction = ctrl.Antecedent(np.arange(0, 2, 1), \"Transaction\")\n",
"cost = ctrl.Antecedent(np.arange(0, 1200, 1), \"Cost\")\n",
"shares = ctrl.Antecedent(np.arange(0, 12000000, 1), \"Shares\")\n",
"value = ctrl.Antecedent(np.arange(0, 2.3e9, 1e6), \"Value\")\n",
"impact = ctrl.Consequent(np.arange(0, 1, 0.01), \"Impact\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Определение нечетких переменных:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\skfuzzy\\control\\fuzzyvariable.py:125: UserWarning: FigureCanvasAgg is non-interactive, and thus cannot be shown\n",
" fig.show()\n",
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\IPython\\core\\events.py:82: UserWarning: Creating legend with loc=\"best\" can be slow with large amounts of data.\n",
" func(*args, **kwargs)\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"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"d:\\ULSTU\\Семестр 5\\AIM-PIbd-31-Masenkin-M-S\\aimenv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Creating legend with loc=\"best\" can be slow with large amounts of data.\n",
" fig.canvas.print_figure(bytes_io, **kw)\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": {
"image/png": "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
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import skfuzzy as fuzz\n",
"\n",
"\n",
"transaction[\"Option Exercise\"] = fuzz.trimf(transaction.universe, [0, 0, 1])\n",
"transaction[\"Sale\"] = fuzz.trimf(transaction.universe, [0, 1, 1])\n",
"transaction.view()\n",
"\n",
"# cost[\"Low\"] = fuzz.zmf(cost.universe, 0, 300)\n",
"# cost[\"Medium\"] = fuzz.trimf(cost.universe, [250, 500, 750])\n",
"# cost[\"High\"] = fuzz.smf(cost.universe, 700, 1200)\n",
"cost.automf(3, names=[\"Low\", \"Medium\", \"High\"])\n",
"cost.view()\n",
"\n",
"# shares[\"Few\"] = fuzz.zmf(shares.universe, 0, 20000)\n",
"# shares[\"Moderate\"] = fuzz.trimf(shares.universe, [10000, 50000, 500000])\n",
"# shares[\"Many\"] = fuzz.smf(shares.universe, 400000, 12000000)\n",
"shares.automf(3, names=[\"Few\", \"Moderate\", \"Many\"])\n",
"shares.view()\n",
"\n",
"# value[\"Low\"] = fuzz.zmf(value.universe, 0, 5e7)\n",
"# value[\"Medium\"] = fuzz.trimf(value.universe, [5e7, 1e8, 1e9])\n",
"# value[\"High\"] = fuzz.smf(value.universe, 1e9, 2.3e9)\n",
"value.automf(3, names=[\"Low\", \"Medium\", \"High\"])\n",
"value.view()\n",
"\n",
"impact[\"Low\"] = fuzz.trimf(impact.universe, [0, 0.3, 0.5])\n",
"impact[\"Medium\"] = fuzz.trimf(impact.universe, [0.3, 0.5, 0.7])\n",
"impact[\"High\"] = fuzz.trimf(impact.universe, [0.5, 0.7, 1])\n",
"impact.view()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Определение нечётких правил:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [],
"source": [
"rule1 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Low\"] & shares[\"Few\"] & value[\"Low\"], impact[\"Low\"])\n",
"rule2 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Low\"] & shares[\"Few\"] & value[\"Medium\"], impact[\"Low\"])\n",
"rule3 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Low\"] & shares[\"Few\"] & value[\"High\"], impact[\"Medium\"])\n",
"rule4 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Low\"] & shares[\"Moderate\"] & value[\"Low\"], impact[\"Low\"])\n",
"rule5 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Low\"] & shares[\"Moderate\"] & value[\"Medium\"], impact[\"Medium\"])\n",
"rule6 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Low\"] & shares[\"Moderate\"] & value[\"High\"], impact[\"High\"])\n",
"rule7 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Low\"] & shares[\"Many\"] & value[\"Low\"], impact[\"Medium\"])\n",
"rule8 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Low\"] & shares[\"Many\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule9 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Low\"] & shares[\"Many\"] & value[\"High\"], impact[\"High\"])\n",
"rule10 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Medium\"] & shares[\"Few\"] & value[\"Low\"], impact[\"Low\"])\n",
"rule11 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Medium\"] & shares[\"Few\"] & value[\"Medium\"], impact[\"Medium\"])\n",
"rule12 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Medium\"] & shares[\"Few\"] & value[\"High\"], impact[\"Medium\"])\n",
"rule13 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Medium\"] & shares[\"Moderate\"] & value[\"Low\"], impact[\"Medium\"])\n",
"rule14 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Medium\"] & shares[\"Moderate\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule15 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Medium\"] & shares[\"Moderate\"] & value[\"High\"], impact[\"High\"])\n",
"rule16 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Medium\"] & shares[\"Many\"] & value[\"Low\"], impact[\"High\"])\n",
"rule17 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Medium\"] & shares[\"Many\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule18 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"Medium\"] & shares[\"Many\"] & value[\"High\"], impact[\"High\"])\n",
"rule19 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"High\"] & shares[\"Few\"] & value[\"Low\"], impact[\"Medium\"])\n",
"rule20 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"High\"] & shares[\"Few\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule21 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"High\"] & shares[\"Few\"] & value[\"High\"], impact[\"High\"])\n",
"rule22 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"High\"] & shares[\"Moderate\"] & value[\"Low\"], impact[\"High\"])\n",
"rule23 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"High\"] & shares[\"Moderate\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule24 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"High\"] & shares[\"Moderate\"] & value[\"High\"], impact[\"High\"])\n",
"rule25 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"High\"] & shares[\"Many\"] & value[\"Low\"], impact[\"High\"])\n",
"rule26 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"High\"] & shares[\"Many\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule27 = ctrl.Rule(transaction[\"Option Exercise\"] & cost[\"High\"] & shares[\"Many\"] & value[\"High\"], impact[\"High\"])\n",
"\n",
"rule28 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Low\"] & shares[\"Few\"] & value[\"Low\"], impact[\"Low\"])\n",
"rule29 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Low\"] & shares[\"Few\"] & value[\"Medium\"], impact[\"Low\"])\n",
"rule30 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Low\"] & shares[\"Few\"] & value[\"High\"], impact[\"Medium\"])\n",
"rule31 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Low\"] & shares[\"Moderate\"] & value[\"Low\"], impact[\"Low\"])\n",
"rule32 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Low\"] & shares[\"Moderate\"] & value[\"Medium\"], impact[\"Medium\"])\n",
"rule33 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Low\"] & shares[\"Moderate\"] & value[\"High\"], impact[\"High\"])\n",
"rule34 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Low\"] & shares[\"Many\"] & value[\"Low\"], impact[\"Medium\"])\n",
"rule35 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Low\"] & shares[\"Many\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule36 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Low\"] & shares[\"Many\"] & value[\"High\"], impact[\"High\"])\n",
"rule37 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Medium\"] & shares[\"Few\"] & value[\"Low\"], impact[\"Low\"])\n",
"rule38 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Medium\"] & shares[\"Few\"] & value[\"Medium\"], impact[\"Medium\"])\n",
"rule39 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Medium\"] & shares[\"Few\"] & value[\"High\"], impact[\"Medium\"])\n",
"rule40 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Medium\"] & shares[\"Moderate\"] & value[\"Low\"], impact[\"Medium\"])\n",
"rule41 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Medium\"] & shares[\"Moderate\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule42 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Medium\"] & shares[\"Moderate\"] & value[\"High\"], impact[\"High\"])\n",
"rule43 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Medium\"] & shares[\"Many\"] & value[\"Low\"], impact[\"High\"])\n",
"rule44 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Medium\"] & shares[\"Many\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule45 = ctrl.Rule(transaction[\"Sale\"] & cost[\"Medium\"] & shares[\"Many\"] & value[\"High\"], impact[\"High\"])\n",
"rule46 = ctrl.Rule(transaction[\"Sale\"] & cost[\"High\"] & shares[\"Few\"] & value[\"Low\"], impact[\"Medium\"])\n",
"rule47 = ctrl.Rule(transaction[\"Sale\"] & cost[\"High\"] & shares[\"Few\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule48 = ctrl.Rule(transaction[\"Sale\"] & cost[\"High\"] & shares[\"Few\"] & value[\"High\"], impact[\"High\"])\n",
"rule49 = ctrl.Rule(transaction[\"Sale\"] & cost[\"High\"] & shares[\"Moderate\"] & value[\"Low\"], impact[\"High\"])\n",
"rule50 = ctrl.Rule(transaction[\"Sale\"] & cost[\"High\"] & shares[\"Moderate\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule51 = ctrl.Rule(transaction[\"Sale\"] & cost[\"High\"] & shares[\"Moderate\"] & value[\"High\"], impact[\"High\"])\n",
"rule52 = ctrl.Rule(transaction[\"Sale\"] & cost[\"High\"] & shares[\"Many\"] & value[\"Low\"], impact[\"High\"])\n",
"rule53 = ctrl.Rule(transaction[\"Sale\"] & cost[\"High\"] & shares[\"Many\"] & value[\"Medium\"], impact[\"High\"])\n",
"rule54 = ctrl.Rule(transaction[\"Sale\"] & cost[\"High\"] & shares[\"Many\"] & value[\"High\"], impact[\"High\"])\n",
"# Мне не понравилось"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Создание нечеткой системы:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[IF ((Transaction[Option Exercise] AND Cost[Low]) AND Shares[Few]) AND Value[Low] THEN Impact[Low]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Low]) AND Shares[Few]) AND Value[Medium] THEN Impact[Low]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Low]) AND Shares[Few]) AND Value[High] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Low]) AND Shares[Moderate]) AND Value[Low] THEN Impact[Low]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Low]) AND Shares[Moderate]) AND Value[Medium] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Low]) AND Shares[Moderate]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Low]) AND Shares[Many]) AND Value[Low] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Low]) AND Shares[Many]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Low]) AND Shares[Many]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Medium]) AND Shares[Few]) AND Value[Low] THEN Impact[Low]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Medium]) AND Shares[Few]) AND Value[Medium] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Medium]) AND Shares[Few]) AND Value[High] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Medium]) AND Shares[Moderate]) AND Value[Low] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Medium]) AND Shares[Moderate]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Medium]) AND Shares[Moderate]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Medium]) AND Shares[Many]) AND Value[Low] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Medium]) AND Shares[Many]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[Medium]) AND Shares[Many]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[High]) AND Shares[Few]) AND Value[Low] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[High]) AND Shares[Few]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[High]) AND Shares[Few]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[High]) AND Shares[Moderate]) AND Value[Low] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[High]) AND Shares[Moderate]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[High]) AND Shares[Moderate]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[High]) AND Shares[Many]) AND Value[Low] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[High]) AND Shares[Many]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Option Exercise] AND Cost[High]) AND Shares[Many]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Low]) AND Shares[Few]) AND Value[Low] THEN Impact[Low]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Low]) AND Shares[Few]) AND Value[Medium] THEN Impact[Low]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Low]) AND Shares[Few]) AND Value[High] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Low]) AND Shares[Moderate]) AND Value[Low] THEN Impact[Low]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Low]) AND Shares[Moderate]) AND Value[Medium] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Low]) AND Shares[Moderate]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Low]) AND Shares[Many]) AND Value[Low] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Low]) AND Shares[Many]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Low]) AND Shares[Many]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Medium]) AND Shares[Few]) AND Value[Low] THEN Impact[Low]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Medium]) AND Shares[Few]) AND Value[Medium] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Medium]) AND Shares[Few]) AND Value[High] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Medium]) AND Shares[Moderate]) AND Value[Low] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Medium]) AND Shares[Moderate]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Medium]) AND Shares[Moderate]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Medium]) AND Shares[Many]) AND Value[Low] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Medium]) AND Shares[Many]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[Medium]) AND Shares[Many]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[High]) AND Shares[Few]) AND Value[Low] THEN Impact[Medium]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[High]) AND Shares[Few]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[High]) AND Shares[Few]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[High]) AND Shares[Moderate]) AND Value[Low] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[High]) AND Shares[Moderate]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[High]) AND Shares[Moderate]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[High]) AND Shares[Many]) AND Value[Low] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[High]) AND Shares[Many]) AND Value[Medium] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax,\n",
" IF ((Transaction[Sale] AND Cost[High]) AND Shares[Many]) AND Value[High] THEN Impact[High]\n",
" \tAND aggregation function : fmin\n",
" \tOR aggregation function : fmax]"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"fuzzy_rules: list[ctrl.Rule] = [\n",
" rule1,\n",
" rule2,\n",
" rule3,\n",
" rule4,\n",
" rule5,\n",
" rule6,\n",
" rule7,\n",
" rule8,\n",
" rule9,\n",
" rule10,\n",
" rule11,\n",
" rule12,\n",
" rule13,\n",
" rule14,\n",
" rule15,\n",
" rule16,\n",
" rule17,\n",
" rule18,\n",
" rule19,\n",
" rule20,\n",
" rule21,\n",
" rule22,\n",
" rule23,\n",
" rule24,\n",
" rule25,\n",
" rule26,\n",
" rule27,\n",
" rule28,\n",
" rule29,\n",
" rule30,\n",
" rule31,\n",
" rule32,\n",
" rule33,\n",
" rule34,\n",
" rule35,\n",
" rule36,\n",
" rule37,\n",
" rule38,\n",
" rule39,\n",
" rule40,\n",
" rule41,\n",
" rule42,\n",
" rule43,\n",
" rule44,\n",
" rule45,\n",
" rule46,\n",
" rule47,\n",
" rule48,\n",
" rule49,\n",
" rule50,\n",
" rule51,\n",
" rule52,\n",
" rule53,\n",
" rule54,\n",
"]\n",
"\n",
"# Создание системы управления\n",
"impact_ctrl = ctrl.ControlSystem(fuzzy_rules)\n",
"\n",
"# Стимуляция системы управления\n",
"impact_sim = ctrl.ControlSystemSimulation(impact_ctrl)\n",
"\n",
"fuzzy_rules"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Тестирование нечёткой системы:"
]
},
{
"cell_type": "code",
"execution_count": 7,
"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>Transaction</th>\n",
" <th>Cost</th>\n",
" <th>Shares</th>\n",
" <th>Value ($)</th>\n",
" <th>Predicted Impact</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>56</th>\n",
" <td>Option Exercise</td>\n",
" <td>55.32</td>\n",
" <td>2500</td>\n",
" <td>138300</td>\n",
" <td>0.266602</td>\n",
" </tr>\n",
" <tr>\n",
" <th>138</th>\n",
" <td>Option Exercise</td>\n",
" <td>6.24</td>\n",
" <td>2152681</td>\n",
" <td>13432729</td>\n",
" <td>0.274953</td>\n",
" </tr>\n",
" <tr>\n",
" <th>123</th>\n",
" <td>Option Exercise</td>\n",
" <td>6.24</td>\n",
" <td>2134440</td>\n",
" <td>13318906</td>\n",
" <td>0.274941</td>\n",
" </tr>\n",
" <tr>\n",
" <th>128</th>\n",
" <td>Sale</td>\n",
" <td>1021.56</td>\n",
" <td>543452</td>\n",
" <td>555171415</td>\n",
" <td>0.533072</td>\n",
" </tr>\n",
" <tr>\n",
" <th>127</th>\n",
" <td>Sale</td>\n",
" <td>1044.54</td>\n",
" <td>390639</td>\n",
" <td>408039939</td>\n",
" <td>0.520312</td>\n",
" </tr>\n",
" <tr>\n",
" <th>66</th>\n",
" <td>Sale</td>\n",
" <td>722.10</td>\n",
" <td>3500</td>\n",
" <td>2527350</td>\n",
" <td>0.312546</td>\n",
" </tr>\n",
" <tr>\n",
" <th>42</th>\n",
" <td>Option Exercise</td>\n",
" <td>0.00</td>\n",
" <td>8228</td>\n",
" <td>0</td>\n",
" <td>0.266667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>26</th>\n",
" <td>Sale</td>\n",
" <td>179.57</td>\n",
" <td>10500</td>\n",
" <td>1885485</td>\n",
" <td>0.266098</td>\n",
" </tr>\n",
" <tr>\n",
" <th>134</th>\n",
" <td>Option Exercise</td>\n",
" <td>0.00</td>\n",
" <td>3283</td>\n",
" <td>0</td>\n",
" <td>0.266667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>79</th>\n",
" <td>Sale</td>\n",
" <td>987.53</td>\n",
" <td>215528</td>\n",
" <td>212841259</td>\n",
" <td>0.460339</td>\n",
" </tr>\n",
" <tr>\n",
" <th>131</th>\n",
" <td>Sale</td>\n",
" <td>980.47</td>\n",
" <td>917</td>\n",
" <td>899091</td>\n",
" <td>0.386775</td>\n",
" </tr>\n",
" <tr>\n",
" <th>36</th>\n",
" <td>Sale</td>\n",
" <td>300.59</td>\n",
" <td>3750</td>\n",
" <td>1127212</td>\n",
" <td>0.262058</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75</th>\n",
" <td>Option Exercise</td>\n",
" <td>62.72</td>\n",
" <td>3500</td>\n",
" <td>219520</td>\n",
" <td>0.266626</td>\n",
" </tr>\n",
" <tr>\n",
" <th>22</th>\n",
" <td>Option Exercise</td>\n",
" <td>0.00</td>\n",
" <td>16871</td>\n",
" <td>0</td>\n",
" <td>0.266666</td>\n",
" </tr>\n",
" <tr>\n",
" <th>135</th>\n",
" <td>Option Exercise</td>\n",
" <td>6.24</td>\n",
" <td>2133441</td>\n",
" <td>13312672</td>\n",
" <td>0.274941</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Transaction Cost Shares Value ($) Predicted Impact\n",
"56 Option Exercise 55.32 2500 138300 0.266602\n",
"138 Option Exercise 6.24 2152681 13432729 0.274953\n",
"123 Option Exercise 6.24 2134440 13318906 0.274941\n",
"128 Sale 1021.56 543452 555171415 0.533072\n",
"127 Sale 1044.54 390639 408039939 0.520312\n",
"66 Sale 722.10 3500 2527350 0.312546\n",
"42 Option Exercise 0.00 8228 0 0.266667\n",
"26 Sale 179.57 10500 1885485 0.266098\n",
"134 Option Exercise 0.00 3283 0 0.266667\n",
"79 Sale 987.53 215528 212841259 0.460339\n",
"131 Sale 980.47 917 899091 0.386775\n",
"36 Sale 300.59 3750 1127212 0.262058\n",
"75 Option Exercise 62.72 3500 219520 0.266626\n",
"22 Option Exercise 0.00 16871 0 0.266666\n",
"135 Option Exercise 6.24 2133441 13312672 0.274941"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"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>Transaction</th>\n",
" <th>Cost</th>\n",
" <th>Shares</th>\n",
" <th>Value ($)</th>\n",
" <th>Predicted Impact</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>96</th>\n",
" <td>Option Exercise</td>\n",
" <td>62.72</td>\n",
" <td>3500</td>\n",
" <td>219520</td>\n",
" <td>0.266626</td>\n",
" </tr>\n",
" <tr>\n",
" <th>69</th>\n",
" <td>Sale</td>\n",
" <td>887.99</td>\n",
" <td>121</td>\n",
" <td>107447</td>\n",
" <td>0.358446</td>\n",
" </tr>\n",
" <tr>\n",
" <th>82</th>\n",
" <td>Sale</td>\n",
" <td>889.08</td>\n",
" <td>2258486</td>\n",
" <td>2007978676</td>\n",
" <td>0.635263</td>\n",
" </tr>\n",
" <tr>\n",
" <th>76</th>\n",
" <td>Sale</td>\n",
" <td>899.42</td>\n",
" <td>3500</td>\n",
" <td>3147970</td>\n",
" <td>0.362990</td>\n",
" </tr>\n",
" <tr>\n",
" <th>114</th>\n",
" <td>Sale</td>\n",
" <td>979.69</td>\n",
" <td>340564</td>\n",
" <td>333647031</td>\n",
" <td>0.484696</td>\n",
" </tr>\n",
" <tr>\n",
" <th>29</th>\n",
" <td>Sale</td>\n",
" <td>208.58</td>\n",
" <td>9650000</td>\n",
" <td>2012758726</td>\n",
" <td>0.677352</td>\n",
" </tr>\n",
" <tr>\n",
" <th>94</th>\n",
" <td>Option Exercise</td>\n",
" <td>52.38</td>\n",
" <td>25000</td>\n",
" <td>1309500</td>\n",
" <td>0.268332</td>\n",
" </tr>\n",
" <tr>\n",
" <th>132</th>\n",
" <td>Option Exercise</td>\n",
" <td>0.00</td>\n",
" <td>1786</td>\n",
" <td>0</td>\n",
" <td>0.266667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>93</th>\n",
" <td>Option Exercise</td>\n",
" <td>0.00</td>\n",
" <td>1786</td>\n",
" <td>0</td>\n",
" <td>0.266667</td>\n",
" </tr>\n",
" <tr>\n",
" <th>139</th>\n",
" <td>Sale</td>\n",
" <td>1171.04</td>\n",
" <td>126471</td>\n",
" <td>148102963</td>\n",
" <td>0.531335</td>\n",
" </tr>\n",
" <tr>\n",
" <th>19</th>\n",
" <td>Sale</td>\n",
" <td>178.07</td>\n",
" <td>3768</td>\n",
" <td>670935</td>\n",
" <td>0.265018</td>\n",
" </tr>\n",
" <tr>\n",
" <th>90</th>\n",
" <td>Sale</td>\n",
" <td>845.39</td>\n",
" <td>1535</td>\n",
" <td>1297675</td>\n",
" <td>0.347088</td>\n",
" </tr>\n",
" <tr>\n",
" <th>15</th>\n",
" <td>Sale</td>\n",
" <td>158.37</td>\n",
" <td>6870000</td>\n",
" <td>1088011570</td>\n",
" <td>0.566694</td>\n",
" </tr>\n",
" <tr>\n",
" <th>125</th>\n",
" <td>Sale</td>\n",
" <td>965.62</td>\n",
" <td>764980</td>\n",
" <td>738683277</td>\n",
" <td>0.537231</td>\n",
" </tr>\n",
" <tr>\n",
" <th>24</th>\n",
" <td>Sale</td>\n",
" <td>189.50</td>\n",
" <td>3750</td>\n",
" <td>710625</td>\n",
" <td>0.264788</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Transaction Cost Shares Value ($) Predicted Impact\n",
"96 Option Exercise 62.72 3500 219520 0.266626\n",
"69 Sale 887.99 121 107447 0.358446\n",
"82 Sale 889.08 2258486 2007978676 0.635263\n",
"76 Sale 899.42 3500 3147970 0.362990\n",
"114 Sale 979.69 340564 333647031 0.484696\n",
"29 Sale 208.58 9650000 2012758726 0.677352\n",
"94 Option Exercise 52.38 25000 1309500 0.268332\n",
"132 Option Exercise 0.00 1786 0 0.266667\n",
"93 Option Exercise 0.00 1786 0 0.266667\n",
"139 Sale 1171.04 126471 148102963 0.531335\n",
"19 Sale 178.07 3768 670935 0.265018\n",
"90 Sale 845.39 1535 1297675 0.347088\n",
"15 Sale 158.37 6870000 1088011570 0.566694\n",
"125 Sale 965.62 764980 738683277 0.537231\n",
"24 Sale 189.50 3750 710625 0.264788"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from sklearn.model_selection import train_test_split\n",
"\n",
"\n",
"# Функция для предсказания значений\n",
"def predict_value(row):\n",
" impact_sim.input[\"Transaction\"] = row[\"Transaction\"]\n",
" impact_sim.input[\"Cost\"] = row[\"Cost\"]\n",
" impact_sim.input[\"Shares\"] = row[\"Shares\"]\n",
" impact_sim.input[\"Value\"] = row[\"Value ($)\"]\n",
" impact_sim.compute()\n",
" return impact_sim.output[\"Impact\"]\n",
"\n",
"\n",
"# Выбор нужных столбцов\n",
"data: DataFrame = df[[\"Transaction\", \"Cost\", \"Shares\", \"Value ($)\"]]\n",
"\n",
"# Разделение данных на обучающую и тестовую выборки (80% / 20%)\n",
"train_data, test_data = train_test_split(data, test_size=0.2, random_state=42)\n",
"\n",
"# Применение модели к обучающей выборке\n",
"train_data[\"Predicted Impact\"] = train_data.apply(predict_value, axis=1)\n",
"display(train_data.head(15))\n",
"\n",
"# Применение модели к тестовой выборке\n",
"test_data[\"Predicted Impact\"] = test_data.apply(predict_value, axis=1)\n",
"display(test_data.head(15))"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "aimenv",
"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.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}