group-telegram.com/data_math/771
Create:
Last Update:
Last Update:
📊 Математическая задача для Data Scientists: "Идеальная точка разбиения"
**Условие**
У тебя есть список чисел List[float]
, представляющий одномерное распределение (например, значения метрики или зарплаты).
Нужно определить: существует ли индекс, на котором можно разделить массив на две части так, чтобы стандартное отклонение слева и справа отличалось не более чем на ε (например, 0.1).
Формат:
def has_balanced_std_split(data: list[float], epsilon: float = 0.1) -> bool:
...
Пример:
data = [1.0, 2.0, 3.0, 4.0, 5.0]
# Разделение после 2 → [1.0, 2.0], [3.0, 4.0, 5.0]
# std слева ≈ 0.5, справа ≈ 0.816 → разница = 0.316 > 0.1 → не подходит
🔍 Подсказка
Используй
statistics.stdev()
или numpy.std(ddof=1)
(с выборочной коррекцией). Но не забывай, что длина подмассива должна быть как минимум 2.
---
✅ Пример реализации:
```python
import statistics
def has_balanced_std_split(data: list[float], epsilon: float = 0.1) -> bool:
n = len(data)
if n < 4:
return False # Нужны хотя бы 2 элемента в каждой части
for i in range(2, n - 1):
left = data[:i]
right = data[i:]
if len(left) < 2 or len(right) < 2:
continue
std_left = statistics.stdev(left)
std_right = statistics.stdev(right)
if abs(std_left - std_right) <= epsilon:
return True
return False
```
📌 Пример использования:
```python
data = [10, 12, 11, 20, 21, 19]
print(has_balanced_std_split(data, epsilon=0.5)) # True или False в зависимости от разбивки
```
🎯 Что проверяет задача:
• понимание **дисперсии и стандартного отклонения**
• знание **статистических библиотек Python**
• работа с ограничениями на длину срезов
• мышление в духе «разделяй и анализируй»
BY Математика Дата саентиста
Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260
Share with your friend now:
group-telegram.com/data_math/771