2024-10-31 04:15:58 +04:00

50 KiB
Raw Blame History

Лабораторная работа №2

Загрузка и анализ трёх датасетов

Описание датасетов

Первый датасет: Diamonds Prices

Описание: Данный набор данных включает информацию о 53 940 бриллиантах круглой огранки и содержит 10 уникальных характеристик, которые описывают бриллиант с разных сторон. Большинство переменных являются числовыми, однако характеристики огранка, цвет и чистота представлены в виде категорий. Цена указана в долларах США.

Объект исследования: Объектом исследования данного датасета являются круглые бриллианты с разными характеристиками, которые влияют на их стоимость.

Атрибуты объекта:

  1. id - Уникальный идентификатор каждого бриллианта

  2. carat - Вес бриллианта в каратах. Карат — это мера массы, где один карат равен 0,2 грамма.

  3. cut - Оценка огранки бриллианта, которая влияет на его способность отражать свет.

  4. color - Цвет бриллианта, который оценивается по шкале, где более высокие уровни означают меньший оттенок желтого и более высокую ценность.

  5. clarity - Чистота бриллианта, измеряемая по количеству и размеру внутренних дефектов или внешних недостатков.

  6. depth - Общая глубина бриллианта, выраженная как процент от его среднего диаметра.

  7. table - Ширина верхней плоской грани бриллианта ("стола"), выраженная как процент от его среднего диаметра.

  8. price - Цена бриллианта в долларах США.

  9. X - Длина бриллианта в миллиметрах.

  10. Y - Ширина бриллианта в миллиметрах.

  11. Z - Глубина бриллианта в миллиметрах.

Цель исследования: Анализ взаимосвязей между различными характеристиками бриллиантов (такими как карат, чистота и огранка) и их ценой. Этот анализ может помочь определить, какие атрибуты оказывают наибольшее влияние на стоимость бриллианта и предоставить информацию для прогнозирования цен на основе параметров.

Ссылка на датасет: https://www.kaggle.com/datasets/nancyalaswad90/diamonds-prices

Второй датасет: Forbes 2022 Billionaires data

Описание: Этот набор данных содержит ежегодный рейтинг миллиардеров с самыми высокими состояниями, составленный журналом Forbes. Информация включает чистую стоимость активов каждого человека, оцененную в долларах США на основе подтвержденных активов за вычетом долгов. Исключены лица, чье богатство не может быть задокументировано, а также представители монархий и диктатуры, чье богатство зависит от их положения. Методология сбора данных включает интервьюирование миллиардеров, анализ публичных данных и оценку активов по рыночным ценам.

Объект исследования: Объектом исследования данного датасета являются документально подтверждённые состояния миллиардеров по всему миру на 2022 год.

Атрибуты объекта:

  1. Rank - Ранг в списке миллиардеров Forbes, который показывает позицию человека по величине состояния среди всех миллиардеров, начиная с самого богатого.

  2. Name - Имя и фамилия миллиардера.

  3. Networth - Чистая стоимость активов миллиардера, выраженная в миллиардах долларов США.

  4. Age - Возраст миллиардера на момент составления рейтинга.

  5. Country - Страна проживания миллиардера, которая показывает национальную принадлежность или основное место жительства.

  6. Source - Источник состояния, указывающий на основные компании, отрасли или типы бизнеса, благодаря которым было накоплено богатство.

  7. Industry - Отрасль, к которой относится основной источник дохода миллиардера.

Цель исследования: Определить распределение и влияние различных факторов (например, происхождения состояния, географического региона) на величину состояния. Это поможет выявить тренды в распределении богатства и дать более глубокое понимание ключевых факторов, влияющих на богатство миллиардеров.

Ссылка на датасет: https://www.kaggle.com/datasets/surajjha101/forbes-billionaires-data-preprocessed

Третий датасет: Tesla Insider Trading

Описание: Этот датасет представляет собой небольшой фрагмент данных о торговле акциями компании Tesla с участием инсайдеров и содержит записи крупных сделок с ноября 2021 года по июль 2022 года. Включает в себя информацию о личности, совершившей сделку, её должности, типе транзакции (покупка, продажа или опцион), стоимости и количестве акций, дате и общей стоимости сделки. Дополнительно указана дата подачи отчета в SEC (Форма 4).

Объект исследования: Объектом исследования данного датасета являются транзакции с акциями Tesla, совершенные инсайдерами компании в период с ноября 2021 года по июль 2022 года.

Атрибуты объекта:

  1. Insider Trading - Лицо, совершившее транзакцию.

  2. Relationship - Статус этого лица в компании.

  3. Date - Дата, когда транзакция была завершена.

  4. Transaction - Тип транзакции.

  5. Cost - Стоимость акций в этой транзакции.

  6. Shares - Сколько акций участвует в транзакции.

  7. Value ($) - Общая стоимость транзакции.

  8. Shares Total - Общее количество акций лица на данный момент.

  9. SEC Form 4 - Дата, когда транзакция была зарегистрирована.

Цель исследования: Анализ инсайдерских сделок, выявление трендов в покупке или продаже акций инсайдерами, а также определение потенциального влияния этих действий на стоимость акций Tesla. Информация может быть полезной для прогнозирования динамики акций компании и принятия инвестиционных решений на основе анализа действий крупных держателей акций.

Ссылка на датасет: https://www.kaggle.com/datasets/ilyaryabov/tesla-insider-trading

Работа с наборами данных

Загрузим три датасета и оценим их структуру

In [5]:
import pandas as pd 
df = pd.read_csv("..//static//csv//DiamondsPrices2022.csv")
df2 = pd.read_csv("..//static//csv//ForbesBillionaires.csv")
df3 = pd.read_csv("..//static//csv//TSLA.csv")

df.info()
df2.info()
df3.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 53943 entries, 0 to 53942
Data columns (total 11 columns):
 #   Column      Non-Null Count  Dtype  
---  ------      --------------  -----  
 0   Unnamed: 0  53943 non-null  int64  
 1   carat       53943 non-null  float64
 2   cut         53943 non-null  object 
 3   color       53943 non-null  object 
 4   clarity     53943 non-null  object 
 5   depth       53943 non-null  float64
 6   table       53943 non-null  float64
 7   price       53943 non-null  int64  
 8   x           53943 non-null  float64
 9   y           53943 non-null  float64
 10  z           53943 non-null  float64
dtypes: float64(6), int64(2), object(3)
memory usage: 4.5+ MB
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 2600 entries, 0 to 2599
Data columns (total 7 columns):
 #   Column    Non-Null Count  Dtype  
---  ------    --------------  -----  
 0   Rank      2600 non-null   int64  
 1   Name      2600 non-null   object 
 2   Networth  2600 non-null   float64
 3   Age       2600 non-null   int64  
 4   Country   2600 non-null   object 
 5   Source    2600 non-null   object 
 6   Industry  2600 non-null   object 
dtypes: float64(1), int64(2), object(4)
memory usage: 142.3+ KB
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 156 entries, 0 to 155
Data columns (total 9 columns):
 #   Column           Non-Null Count  Dtype  
---  ------           --------------  -----  
 0   Insider Trading  156 non-null    object 
 1   Relationship     156 non-null    object 
 2   Date             156 non-null    object 
 3   Transaction      156 non-null    object 
 4   Cost             156 non-null    float64
 5   Shares           156 non-null    object 
 6   Value ($)        156 non-null    object 
 7   Shares Total     156 non-null    object 
 8   SEC Form 4       156 non-null    object 
dtypes: float64(1), object(8)
memory usage: 11.1+ KB

Получение сведений о пропущенных данных

Типы пропущенных данных:

  • None - представление пустых данных в Python
  • NaN - представление пустых данных в Pandas
  • ' ' - пустая строка
In [10]:
# цены на бриллианты
print("Цены на бриллианты")
# Количество пустых значений признаков
print(df.isnull().sum())

print()

# Есть ли пустые значения признаков
print(df.isnull().any())

print()

# Процент пустых значений признаков
for i in df.columns:
    null_rate = df[i].isnull().sum() / len(df) * 100
    if null_rate > 0:
        print(f"{i} процент пустых значений: %{null_rate:.2f}\n")

# рейтинг миллиардеров с Forbes 
print("Рейтинг миллиардеров с Forbes")
# Количество пустых значений признаков
print(df2.isnull().sum())

print()

# Есть ли пустые значения признаков
print(df2.isnull().any())

print()

# Процент пустых значений признаков
for i in df2.columns:
    null_rate = df2[i].isnull().sum() / len(df2) * 100
    if null_rate > 0:
        print(f"{i} процент пустых значений: %{null_rate:.2f}\n")


# Инсайдерские акции компании Tesla
print("Торговля акциями компании Tesla")
# Количество пустых значений признаков
print(df3.isnull().sum())

print()

# Есть ли пустые значения признаков
print(df3.isnull().any())

print()

# Процент пустых значений признаков
for i in df3.columns:
    null_rate = df3[i].isnull().sum() / len(df3) * 100
    if null_rate > 0:
        print(f"{i} процент пустых значений: %{null_rate:.2f}\n")
Цены на бриллианты
Unnamed: 0    0
carat         0
cut           0
color         0
clarity       0
depth         0
table         0
price         0
x             0
y             0
z             0
dtype: int64

Unnamed: 0    False
carat         False
cut           False
color         False
clarity       False
depth         False
table         False
price         False
x             False
y             False
z             False
dtype: bool

Рейтинг миллиардеров с Forbes
Rank        0
Name        0
Networth    0
Age         0
Country     0
Source      0
Industry    0
dtype: int64

Rank        False
Name        False
Networth    False
Age         False
Country     False
Source      False
Industry    False
dtype: bool

Торговля акциями компании Tesla
Insider Trading    0
Relationship       0
Date               0
Transaction        0
Cost               0
Shares             0
Value ($)          0
Shares Total       0
SEC Form 4         0
dtype: int64

Insider Trading    False
Relationship       False
Date               False
Transaction        False
Cost               False
Shares             False
Value ($)          False
Shares Total       False
SEC Form 4         False
dtype: bool

В ходе проверки на

Проверим датасет по числовым данным, для выявления аномальных распределений

In [15]:
print(df.describe())
print(df2.describe())
print(df3.describe())
         Unnamed: 0         carat         depth         table         price  \
count  53943.000000  53943.000000  53943.000000  53943.000000  53943.000000   
mean   26972.000000      0.797935     61.749322     57.457251   3932.734294   
std    15572.147122      0.473999      1.432626      2.234549   3989.338447   
min        1.000000      0.200000     43.000000     43.000000    326.000000   
25%    13486.500000      0.400000     61.000000     56.000000    950.000000   
50%    26972.000000      0.700000     61.800000     57.000000   2401.000000   
75%    40457.500000      1.040000     62.500000     59.000000   5324.000000   
max    53943.000000      5.010000     79.000000     95.000000  18823.000000   

                  x             y             z  
count  53943.000000  53943.000000  53943.000000  
mean       5.731158      5.734526      3.538730  
std        1.121730      1.142103      0.705679  
min        0.000000      0.000000      0.000000  
25%        4.710000      4.720000      2.910000  
50%        5.700000      5.710000      3.530000  
75%        6.540000      6.540000      4.040000  
max       10.740000     58.900000     31.800000  
             Rank      Networth          Age
count  2600.000000  2600.000000  2600.000000
mean   1269.570769     4.860750    64.271923
std     728.146364    10.659671    13.220607
min       1.000000     1.000000    19.000000
25%     637.000000     1.500000    55.000000
50%    1292.000000     2.400000    64.000000
75%    1929.000000     4.500000    74.000000
max    2578.000000   219.000000   100.000000
              Cost
count   156.000000
mean    478.785641
std     448.922903
min       0.000000
25%      50.522500
50%     240.225000
75%     934.107500
max    1171.040000

Аномальное рапределение будем искать по z-индексую. Z-индекс показывает, насколько далеко значение находится от среднего в стандартных отклонениях. Значения Z-индекса больше 3 или меньше -3 обычно считаются аномальными.

In [16]:
from scipy import stats
# Вычисляем Z-индексы только для числовых столбцов
df_zscores = df.select_dtypes(include=['float64', 'int64']).apply(stats.zscore, nan_policy='omit')
df2_zscores = df2.select_dtypes(include=['float64', 'int64']).apply(stats.zscore, nan_policy='omit')
df3_zscores = df3.select_dtypes(include=['float64', 'int64']).apply(stats.zscore, nan_policy='omit')

# Устанавливаем порог для поиска аномалий
threshold = 3

# Функция для нахождения аномалий и вывода сообщения
def find_anomalies(zscores, data):
    for column in zscores.columns:
        # Проверяем, есть ли аномалии в Z-индексах
        anomalies = data[column][(zscores[column].abs() > threshold)]
        if not anomalies.empty:
            print(f"В атрибуте '{column}' обнаружены аномалии: {anomalies.tolist()}")

# Находим аномалии
try:
    print("Аномалии в наборе данных Diamonds Prices:")
    find_anomalies(df_zscores, df)

    print("\nАномалии в наборе данных Forbes Billionaires:")
    find_anomalies(df2_zscores, df2)

    print("\nАномалии в наборе данных Tesla:")
    find_anomalies(df3_zscores, df3)

except Exception as e:
    print(f"Произошла ошибка: {e}")
Аномалии в наборе данных Diamonds Prices:
В атрибуте 'carat' обнаружены аномалии: [2.22, 2.27, 2.49, 3.0, 2.22, 2.25, 2.32, 2.72, 2.23, 2.25, 2.27, 2.3, 2.31, 2.5, 3.01, 3.0, 2.33, 2.68, 2.25, 2.5, 2.34, 2.5, 2.74, 2.28, 2.25, 2.68, 2.43, 3.11, 3.01, 2.52, 2.77, 2.63, 3.05, 2.46, 3.02, 2.63, 2.22, 2.38, 3.01, 3.0, 2.24, 2.32, 2.3, 2.25, 2.25, 2.34, 2.34, 2.26, 2.36, 2.29, 3.0, 2.72, 2.33, 3.65, 2.45, 2.45, 2.24, 2.4, 2.5, 2.54, 2.31, 2.36, 3.24, 2.3, 2.38, 2.31, 2.4, 2.3, 2.58, 2.22, 3.22, 3.5, 2.23, 2.54, 2.28, 2.23, 2.29, 2.26, 2.48, 2.28, 2.23, 2.27, 2.3, 2.34, 2.44, 2.23, 2.26, 2.75, 2.29, 3.0, 2.33, 2.5, 2.5, 2.33, 2.22, 2.3, 2.41, 2.22, 2.25, 2.32, 2.29, 2.22, 2.22, 2.29, 2.29, 2.22, 2.61, 2.26, 2.24, 2.31, 2.52, 2.26, 2.28, 2.28, 2.26, 2.23, 2.3, 2.3, 2.22, 2.29, 2.23, 2.36, 2.35, 2.5, 2.51, 2.3, 2.28, 3.01, 2.27, 2.51, 2.23, 2.22, 2.7, 2.25, 2.28, 2.55, 2.27, 2.35, 2.22, 2.54, 2.29, 2.5, 2.51, 2.51, 2.3, 2.22, 2.38, 2.5, 2.53, 2.22, 2.32, 2.32, 2.33, 2.54, 2.43, 2.23, 2.3, 2.58, 2.55, 2.25, 2.33, 2.31, 2.37, 2.23, 3.0, 2.27, 2.47, 2.43, 2.48, 2.8, 2.22, 2.33, 2.35, 2.53, 2.22, 4.01, 4.01, 2.56, 2.5, 2.41, 2.25, 2.24, 2.41, 2.31, 2.51, 3.04, 2.29, 2.24, 2.54, 2.25, 2.28, 2.75, 2.26, 2.47, 2.3, 2.24, 2.22, 2.26, 2.27, 2.24, 2.46, 2.48, 2.52, 2.27, 2.34, 2.4, 2.24, 2.39, 2.4, 2.5, 3.4, 4.0, 2.5, 2.3, 2.53, 2.25, 2.37, 2.23, 3.01, 2.28, 2.37, 2.3, 2.24, 2.24, 2.31, 2.38, 2.43, 2.28, 2.3, 2.28, 3.67, 2.58, 2.42, 2.42, 2.42, 2.32, 2.66, 2.66, 2.26, 2.26, 2.38, 2.4, 2.51, 2.24, 2.4, 2.65, 2.3, 2.35, 2.54, 2.54, 2.28, 2.22, 2.51, 2.28, 2.59, 2.46, 2.47, 2.44, 3.01, 2.22, 2.24, 2.28, 2.25, 2.45, 2.28, 2.38, 2.24, 2.39, 2.4, 2.22, 2.36, 2.24, 2.53, 2.48, 2.51, 2.37, 2.39, 2.4, 2.31, 2.23, 2.48, 2.42, 2.51, 2.26, 2.63, 2.49, 2.53, 2.37, 2.28, 2.5, 2.28, 3.0, 3.0, 2.41, 2.27, 2.31, 2.26, 2.6, 2.5, 2.4, 2.27, 2.32, 2.31, 2.53, 2.57, 2.22, 2.25, 2.71, 2.27, 2.22, 2.22, 2.51, 2.74, 2.42, 2.42, 2.74, 2.56, 2.3, 2.6, 2.61, 2.31, 2.52, 2.25, 2.42, 2.35, 2.35, 2.26, 4.13, 2.54, 2.39, 2.5, 2.64, 2.48, 2.31, 2.51, 2.44, 2.33, 2.32, 2.52, 2.36, 2.29, 2.36, 2.53, 2.48, 2.52, 2.39, 2.29, 2.28, 2.32, 2.52, 2.31, 2.56, 2.72, 2.36, 2.43, 2.32, 2.28, 2.48, 2.39, 2.41, 2.57, 2.4, 2.39, 2.24, 2.54, 2.35, 2.25, 5.01, 2.51, 2.32, 2.32, 2.26, 2.51, 2.25, 2.25, 2.51, 2.28, 2.29, 2.32, 2.51, 2.3, 2.45, 2.33, 2.23, 2.52, 2.3, 2.3, 3.01, 3.01, 3.01, 3.01, 3.01, 2.52, 2.53, 2.51, 2.24, 2.3, 2.51, 2.5, 2.49, 2.27, 2.22, 2.6, 2.32, 2.4, 2.26, 2.29, 2.44, 2.22, 2.5, 2.57, 2.66, 2.32, 2.37, 2.38, 2.22, 4.5, 2.32, 2.4, 2.4, 3.04, 2.38, 3.01, 2.29, 2.42, 2.29, 2.67, 2.43, 2.48, 3.51, 2.22, 3.01, 3.01, 2.36, 2.61, 2.55, 2.8, 2.29, 2.29]
В атрибуте 'depth' обнаружены аномалии: [56.9, 55.1, 66.3, 67.9, 57.2, 55.1, 67.4, 67.3, 66.4, 68.1, 55.0, 56.0, 53.1, 57.2, 66.7, 53.3, 53.0, 67.8, 67.9, 66.1, 56.9, 55.8, 67.6, 68.2, 67.7, 66.3, 69.5, 56.9, 56.6, 56.3, 66.9, 67.0, 56.0, 67.1, 66.4, 69.3, 66.2, 55.4, 66.8, 66.8, 66.1, 66.1, 68.1, 67.0, 66.6, 55.9, 57.3, 57.3, 57.3, 68.2, 57.4, 66.6, 67.0, 67.0, 68.3, 57.2, 66.8, 57.3, 66.3, 66.1, 68.5, 69.3, 57.4, 56.2, 57.4, 66.1, 56.3, 56.5, 56.1, 56.2, 66.5, 67.6, 66.1, 68.4, 66.2, 69.7, 56.9, 66.6, 57.1, 66.4, 68.7, 66.5, 57.4, 56.7, 66.1, 56.6, 66.8, 66.4, 66.1, 68.6, 71.6, 68.7, 67.3, 66.7, 56.7, 67.7, 66.6, 43.0, 68.8, 66.7, 66.1, 67.1, 67.4, 66.5, 66.1, 57.1, 57.1, 67.8, 67.5, 57.2, 66.4, 67.7, 66.3, 69.0, 57.4, 55.2, 68.2, 68.9, 66.8, 57.4, 56.7, 69.6, 57.4, 56.9, 57.3, 57.4, 66.1, 57.0, 56.4, 56.0, 57.4, 66.1, 68.3, 66.5, 56.8, 66.8, 57.3, 44.0, 57.4, 67.0, 66.1, 56.8, 57.2, 56.4, 56.9, 56.8, 56.8, 57.1, 66.2, 56.9, 66.9, 56.5, 55.2, 66.3, 56.8, 66.3, 56.3, 57.3, 67.8, 56.7, 66.8, 57.1, 66.2, 66.3, 56.8, 66.4, 56.4, 67.2, 57.4, 55.9, 68.8, 66.2, 68.3, 67.1, 70.1, 57.0, 71.3, 66.2, 57.4, 70.6, 69.8, 66.9, 56.7, 66.5, 69.8, 56.5, 71.8, 66.6, 66.4, 66.8, 66.8, 57.0, 57.1, 66.6, 66.9, 67.5, 57.1, 57.4, 69.7, 68.4, 67.6, 56.5, 56.9, 55.9, 66.3, 66.1, 69.7, 66.7, 66.9, 57.2, 43.0, 53.8, 66.1, 66.4, 56.3, 66.1, 56.7, 57.4, 69.5, 66.8, 66.7, 55.9, 56.9, 56.9, 66.6, 56.9, 53.2, 67.0, 56.5, 56.8, 56.3, 70.0, 67.3, 66.2, 55.9, 56.8, 57.2, 56.9, 57.4, 68.5, 57.4, 68.9, 68.9, 57.2, 66.6, 69.4, 57.2, 55.8, 66.6, 56.6, 67.6, 57.3, 66.6, 56.7, 66.7, 67.8, 67.4, 55.9, 57.3, 56.3, 67.0, 67.6, 57.3, 68.0, 69.8, 66.9, 57.0, 67.3, 66.6, 69.0, 57.4, 57.0, 67.0, 66.8, 57.4, 68.1, 57.4, 57.4, 57.3, 66.3, 70.2, 57.1, 66.4, 68.0, 68.0, 66.3, 66.9, 57.1, 67.7, 66.1, 68.5, 70.1, 66.2, 67.4, 56.7, 67.7, 50.8, 66.5, 55.6, 70.5, 68.2, 68.0, 57.4, 56.5, 67.6, 56.9, 57.4, 55.9, 68.6, 71.0, 68.4, 67.4, 55.6, 56.1, 67.2, 68.8, 55.8, 56.8, 69.6, 57.1, 56.3, 66.1, 56.7, 66.3, 56.6, 66.5, 66.8, 67.1, 66.8, 67.3, 66.5, 68.3, 56.2, 66.1, 67.1, 69.1, 56.0, 56.3, 67.5, 56.9, 68.7, 57.2, 57.4, 57.2, 57.2, 57.2, 67.1, 68.3, 66.6, 66.9, 57.0, 66.3, 67.7, 55.2, 66.2, 66.5, 66.9, 56.7, 56.1, 66.7, 57.0, 67.9, 66.7, 66.4, 55.3, 56.9, 57.0, 56.2, 57.2, 67.1, 56.8, 56.2, 67.4, 57.1, 56.8, 66.3, 57.3, 66.3, 56.3, 57.0, 56.7, 57.3, 57.2, 56.5, 67.0, 66.5, 66.6, 66.9, 56.7, 67.2, 70.2, 56.2, 66.7, 66.3, 66.1, 66.8, 66.9, 56.9, 56.8, 67.7, 67.5, 67.6, 56.9, 70.6, 55.2, 67.6, 56.3, 66.2, 66.2, 68.6, 56.9, 56.5, 66.4, 57.0, 66.8, 57.1, 55.3, 56.7, 54.2, 57.0, 67.9, 56.5, 66.8, 68.6, 56.2, 57.1, 56.6, 66.3, 55.2, 57.1, 67.0, 51.0, 66.9, 66.8, 67.3, 67.3, 66.7, 57.4, 57.2, 56.0, 66.9, 56.6, 56.3, 57.4, 68.3, 66.9, 66.3, 70.8, 66.5, 56.4, 66.5, 54.2, 57.1, 66.9, 54.6, 53.2, 54.0, 54.4, 66.3, 56.9, 66.3, 66.5, 55.2, 70.8, 66.5, 56.7, 56.8, 57.3, 67.5, 66.8, 56.3, 56.6, 66.2, 68.6, 66.5, 67.1, 66.2, 56.5, 66.5, 57.1, 56.5, 67.1, 66.6, 66.3, 57.3, 57.1, 68.6, 56.3, 66.5, 56.5, 66.9, 52.3, 67.3, 66.1, 57.2, 56.8, 57.2, 66.4, 66.1, 55.5, 66.5, 57.2, 56.3, 56.8, 56.7, 66.9, 56.3, 57.4, 67.6, 78.2, 57.4, 66.1, 71.2, 55.8, 67.0, 56.2, 52.7, 66.5, 57.3, 57.2, 66.7, 57.4, 56.3, 55.8, 54.3, 57.4, 66.1, 66.8, 55.3, 56.4, 66.3, 57.0, 55.3, 69.3, 66.9, 57.2, 57.4, 56.1, 56.4, 57.2, 56.7, 66.4, 67.0, 57.1, 56.3, 56.9, 56.9, 55.1, 56.0, 66.1, 66.2, 67.6, 71.6, 66.9, 69.7, 69.2, 68.0, 56.9, 66.9, 57.3, 66.1, 67.8, 68.9, 55.8, 56.6, 57.2, 67.2, 68.5, 73.6, 56.9, 68.6, 56.2, 67.4, 67.2, 66.1, 57.0, 55.0, 70.6, 56.2, 57.1, 55.3, 52.2, 67.4, 57.4, 68.4, 67.3, 57.4, 56.1, 67.3, 67.6, 57.0, 57.1, 66.9, 57.2, 57.1, 56.6, 57.4, 67.3, 57.0, 57.2, 55.5, 57.1, 69.9, 56.6, 68.4, 57.4, 57.0, 55.8, 53.4, 56.9, 56.7, 66.3, 57.0, 66.7, 68.5, 57.3, 68.0, 66.1, 66.5, 68.8, 57.1, 70.2, 55.9, 68.2, 67.2, 66.4, 66.5, 56.1, 57.4, 67.8, 67.3, 55.6, 66.3, 66.7, 66.6, 67.8, 56.2, 66.3, 66.2, 66.4, 55.9, 67.1, 57.2, 66.4, 67.7, 57.3, 72.2, 57.4, 56.8, 57.2, 56.9, 57.0, 66.2, 56.9, 56.7, 66.4, 67.3, 55.5, 67.8, 69.0, 66.6, 66.8, 66.3, 57.4, 66.2, 57.1, 66.1, 66.5, 66.5, 79.0, 79.0, 67.7, 56.5, 66.7, 57.0, 67.6, 66.9, 72.9, 54.7, 57.3, 66.9, 55.6, 55.4, 68.7, 66.8]
В атрибуте 'table' обнаружены аномалии: [65.0, 69.0, 67.0, 66.0, 70.0, 66.0, 68.0, 67.0, 67.0, 65.0, 70.0, 69.0, 65.0, 66.0, 67.0, 67.0, 66.0, 65.0, 66.0, 67.0, 66.0, 66.0, 65.0, 66.0, 65.0, 65.0, 67.0, 65.0, 66.0, 65.0, 68.0, 65.0, 66.0, 66.0, 66.0, 50.1, 65.0, 65.0, 66.0, 66.0, 65.0, 65.0, 67.0, 65.0, 65.0, 65.0, 65.0, 65.0, 66.0, 65.0, 65.0, 67.0, 66.0, 68.0, 65.0, 65.0, 65.0, 66.0, 66.0, 65.0, 49.0, 65.0, 66.0, 66.0, 67.0, 67.0, 65.0, 67.0, 66.0, 65.0, 66.0, 67.0, 65.0, 65.0, 65.0, 65.0, 50.0, 65.0, 66.0, 67.0, 65.0, 68.0, 66.0, 65.0, 65.0, 65.0, 65.0, 66.0, 65.0, 67.0, 66.0, 66.0, 66.0, 68.0, 65.0, 67.0, 65.0, 66.0, 66.0, 65.0, 68.0, 65.0, 43.0, 65.0, 65.0, 66.0, 67.0, 65.0, 65.0, 65.0, 65.0, 65.0, 65.0, 68.0, 67.0, 66.0, 65.0, 65.0, 67.0, 65.0, 66.0, 65.0, 65.0, 65.0, 65.0, 67.0, 65.0, 66.0, 67.0, 66.0, 69.0, 65.0, 65.0, 65.0, 66.0, 68.0, 66.0, 66.0, 65.0, 65.0, 69.0, 65.0, 66.0, 65.0, 65.0, 66.0, 67.0, 66.0, 49.0, 68.0, 65.0, 70.0, 66.0, 65.0, 67.0, 68.0, 65.0, 66.0, 65.0, 68.0, 68.0, 66.0, 65.0, 66.0, 69.0, 66.0, 65.0, 95.0, 66.0, 65.0, 66.0, 50.0, 65.0, 66.0, 66.0, 65.0, 65.0, 66.0, 65.0, 65.0, 65.0, 66.0, 69.0, 65.0, 65.0, 65.0, 65.0, 65.0, 66.0, 65.0, 66.0, 66.0, 65.0, 67.0, 66.0, 67.0, 65.0, 65.0, 66.0, 65.0, 44.0, 68.0, 65.0, 65.0, 67.0, 67.0, 66.0, 65.0, 65.0, 66.0, 65.0, 65.0, 66.0, 66.0, 65.0, 69.0, 65.0, 65.0, 66.0, 67.0, 68.0, 65.0, 68.0, 65.0, 70.0, 66.0, 65.0, 65.0, 66.0, 66.0, 65.0, 68.0, 65.0, 64.3, 65.0, 66.0, 69.0, 65.0, 66.0, 65.0, 70.0, 65.0, 65.0, 65.0, 71.0, 66.0, 67.0, 68.0, 67.0, 67.0, 67.0, 66.0, 66.0, 70.0, 67.0, 67.0, 65.0, 67.0, 65.0, 67.0, 65.0, 66.0, 66.0, 65.0, 66.0, 66.0, 66.0, 64.2, 68.0, 66.0, 66.0, 66.0, 66.0, 65.0, 66.0, 65.0, 65.0, 66.0, 65.0, 73.0, 66.0, 65.0, 65.0, 65.0, 67.0, 65.0, 65.0, 68.0, 65.0, 66.0, 65.4, 65.0, 65.0, 65.0, 66.0, 79.0, 65.0, 68.0, 70.0, 66.0, 65.0, 65.0, 67.0, 66.0, 65.0, 65.0, 76.0, 73.0, 65.0, 65.0, 66.0, 66.0, 65.0, 65.0, 65.0, 65.0, 70.0, 65.0, 66.0, 65.0, 70.0, 69.0, 67.0, 67.0, 73.0, 73.0, 66.0, 68.0, 66.0, 65.0, 65.0, 67.0, 67.0, 65.0, 65.0, 65.0]
В атрибуте 'price' обнаружены аномалии: [15907, 15908, 15913, 15915, 15917, 15917, 15917, 15919, 15919, 15919, 15920, 15922, 15923, 15928, 15930, 15930, 15931, 15934, 15937, 15938, 15939, 15939, 15941, 15941, 15941, 15942, 15946, 15948, 15948, 15949, 15949, 15952, 15955, 15957, 15959, 15959, 15962, 15964, 15965, 15966, 15968, 15970, 15970, 15974, 15977, 15977, 15983, 15984, 15984, 15984, 15984, 15987, 15987, 15990, 15991, 15992, 15992, 15992, 15992, 15992, 15992, 15993, 15996, 15996, 16003, 16004, 16013, 16018, 16021, 16023, 16025, 16031, 16036, 16037, 16041, 16043, 16048, 16049, 16052, 16055, 16059, 16062, 16062, 16064, 16064, 16064, 16068, 16068, 16073, 16073, 16075, 16077, 16080, 16082, 16085, 16086, 16086, 16087, 16091, 16092, 16097, 16098, 16100, 16104, 16104, 16111, 16112, 16112, 16116, 16123, 16126, 16128, 16129, 16130, 16131, 16137, 16140, 16146, 16147, 16148, 16149, 16149, 16151, 16169, 16169, 16169, 16170, 16171, 16171, 16174, 16179, 16181, 16183, 16187, 16187, 16188, 16189, 16190, 16191, 16192, 16193, 16195, 16198, 16198, 16198, 16206, 16210, 16215, 16219, 16220, 16223, 16224, 16231, 16231, 16232, 16234, 16235, 16235, 16237, 16239, 16239, 16239, 16240, 16240, 16241, 16241, 16241, 16242, 16253, 16253, 16256, 16256, 16261, 16262, 16273, 16274, 16277, 16278, 16280, 16280, 16286, 16287, 16287, 16287, 16290, 16291, 16294, 16294, 16295, 16297, 16300, 16300, 16304, 16304, 16304, 16309, 16309, 16311, 16314, 16316, 16316, 16316, 16319, 16319, 16319, 16323, 16329, 16336, 16337, 16339, 16340, 16340, 16343, 16353, 16353, 16357, 16357, 16358, 16363, 16364, 16364, 16368, 16369, 16370, 16378, 16380, 16383, 16384, 16386, 16389, 16390, 16392, 16392, 16395, 16397, 16397, 16398, 16400, 16402, 16404, 16406, 16407, 16407, 16409, 16410, 16412, 16420, 16422, 16425, 16426, 16427, 16427, 16427, 16431, 16437, 16439, 16442, 16446, 16450, 16451, 16459, 16462, 16462, 16465, 16466, 16466, 16469, 16472, 16479, 16479, 16483, 16484, 16485, 16492, 16499, 16499, 16505, 16506, 16506, 16507, 16512, 16512, 16513, 16518, 16519, 16520, 16521, 16530, 16532, 16533, 16538, 16544, 16544, 16545, 16547, 16547, 16551, 16558, 16558, 16558, 16560, 16562, 16564, 16565, 16570, 16575, 16575, 16580, 16582, 16582, 16583, 16587, 16589, 16592, 16593, 16599, 16601, 16603, 16611, 16613, 16616, 16617, 16618, 16624, 16626, 16626, 16626, 16626, 16628, 16628, 16629, 16629, 16629, 16632, 16636, 16641, 16642, 16643, 16643, 16650, 16650, 16650, 16656, 16657, 16665, 16669, 16670, 16677, 16683, 16687, 16687, 16688, 16689, 16690, 16693, 16694, 16694, 16700, 16703, 16704, 16704, 16707, 16709, 16709, 16709, 16715, 16716, 16716, 16716, 16717, 16718, 16718, 16723, 16723, 16728, 16731, 16733, 16733, 16733, 16733, 16733, 16733, 16736, 16737, 16742, 16747, 16750, 16754, 16768, 16769, 16776, 16776, 16778, 16778, 16778, 16778, 16778, 16778, 16778, 16779, 16779, 16779, 16783, 16783, 16783, 16783, 16786, 16787, 16789, 16789, 16789, 16790, 16791, 16792, 16793, 16793, 16797, 16800, 16801, 16803, 16804, 16805, 16807, 16808, 16811, 16813, 16817, 16819, 16820, 16823, 16824, 16826, 16842, 16842, 16854, 16857, 16861, 16872, 16872, 16874, 16878, 16879, 16881, 16881, 16889, 16896, 16900, 16900, 16900, 16901, 16904, 16914, 16914, 16914, 16914, 16915, 16916, 16921, 16922, 16929, 16931, 16934, 16937, 16941, 16942, 16944, 16945, 16948, 16954, 16955, 16955, 16956, 16956, 16957, 16960, 16960, 16960, 16969, 16970, 16970, 16975, 16985, 16985, 16987, 16988, 16992, 16994, 16996, 17000, 17001, 17003, 17005, 17006, 17009, 17010, 17012, 17014, 17016, 17017, 17019, 17024, 17024, 17027, 17028, 17028, 17028, 17029, 17036, 17038, 17039, 17041, 17042, 17045, 17045, 17049, 17049, 17050, 17051, 17051, 17052, 17053, 17057, 17057, 17062, 17063, 17065, 17066, 17068, 17068, 17068, 17068, 17068, 17073, 17073, 17076, 17078, 17079, 17081, 17084, 17094, 17095, 17095, 17096, 17099, 17100, 17103, 17108, 17111, 17114, 17114, 17115, 17116, 17118, 17123, 17125, 17126, 17127, 17136, 17138, 17141, 17143, 17143, 17146, 17149, 17151, 17153, 17153, 17156, 17160, 17162, 17164, 17166, 17168, 17168, 17172, 17172, 17175, 17176, 17179, 17179, 17182, 17184, 17186, 17191, 17191, 17192, 17193, 17193, 17194, 17197, 17197, 17203, 17203, 17204, 17204, 17206, 17209, 17209, 17213, 17214, 17216, 17218, 17219, 17219, 17220, 17221, 17223, 17224, 17227, 17228, 17231, 17233, 17235, 17235, 17237, 17240, 17244, 17245, 17247, 17250, 17254, 17256, 17258, 17262, 17263, 17263, 17265, 17265, 17265, 17267, 17273, 17278, 17279, 17294, 17294, 17294, 17294, 17297, 17312, 17313, 17313, 17315, 17317, 17323, 17323, 17327, 17329, 17329, 17330, 17334, 17338, 17339, 17343, 17347, 17351, 17353, 17353, 17357, 17358, 17360, 17360, 17365, 17365, 17366, 17374, 17377, 17379, 17381, 17383, 17392, 17393, 17393, 17400, 17403, 17403, 17403, 17403, 17405, 17405, 17407, 17408, 17414, 17416, 17422, 17425, 17433, 17433, 17434, 17436, 17441, 17442, 17447, 17448, 17449, 17451, 17452, 17455, 17458, 17460, 17469, 17469, 17472, 17473, 17474, 17475, 17476, 17485, 17489, 17492, 17492, 17496, 17497, 17499, 17504, 17509, 17513, 17514, 17515, 17516, 17521, 17522, 17523, 17525, 17530, 17533, 17534, 17534, 17535, 17539, 17545, 17548, 17552, 17553, 17554, 17555, 17569, 17569, 17570, 17574, 17579, 17581, 17582, 17590, 17591, 17592, 17595, 17597, 17597, 17598, 17600, 17604, 17605, 17606, 17607, 17607, 17608, 17609, 17614, 17614, 17617, 17634, 17640, 17642, 17649, 17650, 17658, 17659, 17662, 17663, 17666, 17667, 17672, 17673, 17673, 17674, 17676, 17676, 17685, 17688, 17688, 17689, 17689, 17692, 17694, 17710, 17712, 17713, 17714, 17715, 17716, 17723, 17724, 17729, 17730, 17740, 17742, 17746, 17747, 17751, 17752, 17753, 17759, 17759, 17760, 17760, 17760, 17760, 17760, 17760, 17761, 17765, 17766, 17772, 17773, 17776, 17778, 17784, 17798, 17801, 17803, 17803, 17804, 17805, 17805, 17811, 17816, 17820, 17825, 17825, 17826, 17829, 17835, 17837, 17838, 17840, 17841, 17849, 17849, 17849, 17849, 17856, 17864, 17869, 17871, 17871, 17877, 17882, 17887, 17888, 17889, 17891, 17891, 17892, 17892, 17892, 17893, 17893, 17893, 17894, 17895, 17898, 17902, 17904, 17904, 17905, 17909, 17916, 17917, 17920, 17923, 17924, 17930, 17932, 17934, 17936, 17936, 17938, 17949, 17952, 17952, 17953, 17955, 17955, 17957, 17975, 17983, 17986, 17987, 17988, 17989, 17995, 17996, 17999, 17999, 18001, 18002, 18003, 18005, 18007, 18014, 18017, 18018, 18020, 18023, 18026, 18026, 18026, 18026, 18027, 18027, 18028, 18029, 18029, 18034, 18034, 18034, 18037, 18041, 18050, 18055, 18055, 18057, 18059, 18062, 18062, 18066, 18067, 18068, 18069, 18071, 18077, 18077, 18077, 18077, 18080, 18090, 18102, 18104, 18107, 18107, 18108, 18112, 18113, 18114, 18115, 18115, 18115, 18117, 18118, 18119, 18120, 18120, 18124, 18124, 18125, 18127, 18128, 18128, 18128, 18128, 18139, 18139, 18149, 18149, 18152, 18153, 18159, 18164, 18166, 18168, 18172, 18172, 18176, 18178, 18179, 18179, 18181, 18183, 18186, 18186, 18188, 18188, 18190, 18193, 18193, 18193, 18198, 18206, 18207, 18207, 18211, 18215, 18231, 18231, 18232, 18236, 18236, 18236, 18236, 18239, 18242, 18242, 18242, 18242, 18242, 18251, 18252, 18252, 18254, 18255, 18257, 18259, 18274, 18275, 18276, 18279, 18279, 18281, 18281, 18286, 18291, 18293, 18294, 18295, 18295, 18296, 18299, 18304, 18306, 18308, 18310, 18312, 18318, 18318, 18320, 18324, 18325, 18325, 18340, 18342, 18342, 18343, 18344, 18358, 18359, 18363, 18364, 18369, 18371, 18371, 18371, 18371, 18374, 18374, 18376, 18377, 18392, 18394, 18395, 18398, 18398, 18398, 18405, 18407, 18416, 18419, 18421, 18423, 18426, 18426, 18426, 18429, 18430, 18430, 18430, 18431, 18432, 18435, 18439, 18440, 18440, 18442, 18443, 18445, 18447, 18447, 18458, 18462, 18462, 18468, 18470, 18472, 18474, 18475, 18477, 18480, 18481, 18483, 18485, 18487, 18489, 18493, 18495, 18500, 18507, 18507, 18508, 18508, 18509, 18515, 18522, 18524, 18525, 18526, 18528, 18531, 18531, 18532, 18535, 18541, 18541, 18542, 18552, 18557, 18559, 18559, 18559, 18561, 18561, 18565, 18571, 18572, 18574, 18575, 18578, 18593, 18594, 18598, 18599, 18604, 18607, 18611, 18614, 18615, 18625, 18630, 18640, 18640, 18648, 18653, 18656, 18659, 18663, 18674, 18678, 18678, 18680, 18682, 18686, 18691, 18692, 18692, 18693, 18700, 18700, 18701, 18705, 18706, 18707, 18709, 18710, 18710, 18717, 18718, 18729, 18730, 18731, 18735, 18736, 18741, 18741, 18741, 18745, 18756, 18757, 18759, 18760, 18766, 18768, 18777, 18779, 18780, 18781, 18784, 18787, 18788, 18791, 18791, 18795, 18795, 18797, 18803, 18804, 18806, 18818, 18823]
В атрибуте 'x' обнаружены аномалии: [0.0, 0.0, 0.0, 9.23, 9.1, 9.11, 9.15, 9.24, 9.26, 9.11, 9.54, 9.38, 9.17, 9.53, 9.44, 9.49, 9.65, 0.0, 9.42, 9.44, 9.32, 10.14, 10.02, 9.14, 0.0, 9.42, 10.01, 9.25, 9.86, 9.3, 9.13, 10.0, 10.74, 0.0, 9.36, 10.23, 9.51, 9.44, 9.66, 9.35, 9.41, 0.0, 0.0]
В атрибуте 'y' обнаружены аномалии: [0.0, 0.0, 9.25, 9.38, 9.31, 9.48, 58.9, 9.4, 9.42, 9.59, 0.0, 9.26, 9.37, 9.19, 10.1, 9.94, 0.0, 9.34, 9.94, 9.2, 9.81, 9.85, 10.54, 0.0, 9.31, 10.16, 9.46, 9.38, 9.63, 9.22, 9.32, 31.8, 0.0, 0.0]
В атрибуте 'z' обнаружены аномалии: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.07, 0.0, 5.77, 5.76, 5.67, 5.97, 1.41, 5.98, 5.73, 5.66, 5.91, 5.79, 6.38, 8.06, 5.85, 5.92, 6.03, 0.0, 0.0, 6.17, 6.24, 5.75, 0.0, 6.16, 0.0, 6.27, 6.31, 5.69, 6.13, 5.86, 5.72, 0.0, 6.43, 6.98, 0.0, 0.0, 5.9, 5.9, 5.77, 5.77, 6.72, 6.03, 0.0, 31.8, 0.0, 0.0, 0.0]

Аномалии в наборе данных Forbes Billionaires:
В атрибуте 'Networth' обнаружены аномалии: [219.0, 171.0, 158.0, 129.0, 118.0, 111.0, 107.0, 106.0, 91.4, 90.7, 90.0, 82.0, 81.2, 74.8, 67.3, 66.2, 65.7, 65.3, 65.0, 65.0, 60.0, 60.0, 59.6, 55.1, 50.0, 49.2, 47.3, 47.1, 44.8, 43.6, 41.4, 40.4, 37.3, 37.2]
В атрибуте 'Age' обнаружены аномалии: [19]

Аномалии в наборе данных Tesla:

Теперь выполним 10 пункт, разобьем данные на выборки

In [33]:
df2['networth_segment'] = pd.cut(df2['Networth'], bins=[0,10,80,250], labels=['Ultra High Networth','High Networth','Medium Networth'], include_lowest=True)
In [34]:
from sklearn.model_selection import train_test_split
def split_data(data, target_column, test_size=0.2, random_state=42):
    # Разделяем данные на обучающую и временную выборки
    X_train, X_temp, y_train, y_temp = train_test_split(data.drop(columns=[target_column]), 
                                                        data[target_column], 
                                                        test_size=test_size, 
                                                        random_state=random_state, 
                                                        stratify=data[target_column])
    # Делим временную выборку на контрольную и тестовую
    X_val, X_test, y_val, y_test = train_test_split(X_temp, y_temp, 
                                                      test_size=0.5, 
                                                      random_state=random_state, 
                                                      stratify=y_temp)
    
    return X_train, X_val, X_test, y_train, y_val, y_test

# Для набора данных neo
df_train, df_val, df_test, df_train_labels, df_val_labels, df_test_labels = split_data(df, 'cut')

# Для набора данных healthcare
df2_train, df2_val, df2_test, df2_train_labels, df2_val_labels, df2_test_labels = split_data(df2, 'networth_segment')

# Для набора данных diabetes
df3_train, df3_val, df3_test, df3_train_labels, df3_val_labels, df3_test_labels = split_data(df3, 'Transaction')
def check_balance(y_train, y_val, y_test):
    print("Обучающая выборка:")
    print(y_train.value_counts(normalize=True))
    print("\nКонтрольная выборка:")
    print(y_val.value_counts(normalize=True))
    print("\nТестовая выборка:")
    print(y_test.value_counts(normalize=True))

print("Набор данных Diamonds Prices:")
check_balance(df_train_labels, df_val_labels, df_test_labels)

print("\nНабор данных Forbes Billionaires:")
check_balance(df2_train_labels, df2_val_labels, df2_test_labels)

print("\nНабор данных Tesla:")
check_balance(df3_train_labels, df3_val_labels, df3_test_labels)
Набор данных Diamonds Prices:
Обучающая выборка:
cut
Ideal        0.399523
Premium      0.255689
Very Good    0.223989
Good         0.090953
Fair         0.029847
Name: proportion, dtype: float64

Контрольная выборка:
cut
Ideal        0.399518
Premium      0.255654
Very Good    0.223953
Good         0.091027
Fair         0.029848
Name: proportion, dtype: float64

Тестовая выборка:
cut
Ideal        0.399444
Premium      0.255792
Very Good    0.224096
Good         0.090825
Fair         0.029842
Name: proportion, dtype: float64

Набор данных Forbes Billionaires:
Обучающая выборка:
networth_segment
Ultra High Networth    0.924519
High Networth          0.070192
Medium Networth        0.005288
Name: proportion, dtype: float64

Контрольная выборка:
networth_segment
Ultra High Networth    0.926923
High Networth          0.069231
Medium Networth        0.003846
Name: proportion, dtype: float64

Тестовая выборка:
networth_segment
Ultra High Networth    0.923077
High Networth          0.073077
Medium Networth        0.003846
Name: proportion, dtype: float64

Набор данных Tesla:
Обучающая выборка:
Transaction
Sale               0.637097
Option Exercise    0.362903
Name: proportion, dtype: float64

Контрольная выборка:
Transaction
Sale               0.625
Option Exercise    0.375
Name: proportion, dtype: float64

Тестовая выборка:
Transaction
Sale               0.625
Option Exercise    0.375
Name: proportion, dtype: float64

Приращение методами выборки с избытком (oversampling) и выборки с недостатком (undersampling)

In [43]:
from imblearn.over_sampling import RandomOverSampler
from imblearn.under_sampling import RandomUnderSampler

# Пример Oversampling для Diamonds Prices
X_df = df.drop('cut', axis=1) 
y_df = df['cut']                

# Oversampling
ros_df = RandomOverSampler(random_state=42)
X_df_resampled, y_df_resampled = ros_df.fit_resample(X_df, y_df)
df_resampled = pd.DataFrame(X_df_resampled, columns=X_df.columns)
df_resampled['cut'] = y_df_resampled

print("Oversampling для Diamonds Prices:")
print(df_resampled['cut'].value_counts())


X_df2 = df2.drop('networth_segment', axis=1)
y_df2 = df2['networth_segment']

# Пример Undersampling для Forbes Billionaires
rus_df2 = RandomUnderSampler(random_state=42)
X_df2_resampled_under, y_df2_resampled_under = rus_df2.fit_resample(X_df2, y_df2)
df2_resampled_under = pd.DataFrame(X_df2_resampled_under, columns=X_df2.columns)
df2_resampled_under['networth_segment'] = y_df2_resampled_under

print("\nUndersampling для Forbes Billionaires:")
print(df2_resampled_under['networth_segment'].value_counts())

# Пример Oversampling для Tesla
X_df3 = df3.drop('Transaction', axis=1)
y_df3 = df3['Transaction']

# Oversampling
ros_df3 = RandomOverSampler(random_state=42)
X_df3_resampled, y_df3_resampled = ros_df3.fit_resample(X_df3, y_df3)
df3_resampled = pd.DataFrame(X_df3_resampled, columns=X_df3.columns)
df3_resampled['Transaction'] = y_df3_resampled

print("\nOversampling для Tesla:")
print(df3_resampled['Transaction'].value_counts())
Oversampling для Diamonds Prices:
cut
Ideal        21551
Premium      21551
Good         21551
Very Good    21551
Fair         21551
Name: count, dtype: int64

Undersampling для Forbes Billionaires:
networth_segment
Ultra High Networth    13
High Networth          13
Medium Networth        13
Name: count, dtype: int64

Oversampling для Tesla:
Transaction
Sale               99
Option Exercise    99
Name: count, dtype: int64