Telegram Group & Telegram Channel
🧩 Задача для продвинутых дата-сайентистов: "Парадоксальная корреляция"

📖 Описание задачи

У вас есть DataFrame df с данными о рекламных кампаниях:


import pandas as pd

data = {
'campaign_id': [1, 2, 3, 4, 5, 6],
'spend': [1000, 1500, 1200, None, 2000, 1700],
'revenue': [2000, 2300, 2500, 1800, None, 2700]
}

df = pd.DataFrame(data)
print(df)


Результат:


campaign_id spend revenue
0 1 1000.0 2000.0
1 2 1500.0 2300.0
2 3 1200.0 2500.0
3 4 NaN 1800.0
4 5 2000.0 NaN
5 6 1700.0 2700.0


Вам нужно посчитать корреляцию между spend и revenue.

Вы пишете:


correlation = df['spend'].corr(df['revenue'])
print(correlation)


И получаете:


nan


❗️Но вы уверены, что данные связаны (чем больше spend, тем больше revenue), а Pandas возвращает NaN.

📝 Ваша задача:

1. Почему Pandas возвращает NaN?
2. Как правильно посчитать корреляцию?
3. Как бы вы обработали такие данные в продакшн-пайплайне?

---

🎯 Подвох (ключевой момент):

Метод corr() автоматически игнорирует строки, где хотя бы одно значение NaN.

В этом DataFrame остаются только строки с индексами 0, 1, 2, 5.
→ На этих данных корреляция может быть рассчитана.

Но главная проблема — тип данных.

Если данные были считаны, например, из CSV, где пустые значения остались строками, то Pandas определит колонку как object, а не float64:


print(df.dtypes)


Вывод:


spend object
revenue object


И тогда corr() вернёт NaN, потому что не смог интерпретировать данные как числовые.

---

💡 Решение:

1. Проверить типы данных:

```python
print(df.dtypes)
```

2. Привести к числовому типу:

```python
df['spend'] = pd.to_numeric(df['spend'], errors='coerce')
df['revenue'] = pd.to_numeric(df['revenue'], errors='coerce')
```

3. Посчитать корреляцию без NaN:

```python
correlation = df[['spend', 'revenue']].dropna().corr().iloc[0, 1]
print(correlation)
```

Теперь корреляция рассчитана корректно.

---

🔥 Дополнительный подвох:

А что если CSV-файл считан с
delimiter=';', а данные внутри разделены запятыми?
→ Тогда весь DataFrame будет одной колонкой с типом object, а Pandas не сможет даже начать обработку.

---

📝 Что проверяет задача:

Понимание, как Pandas обрабатывает NaN и object
Внимательность к типам данных
Умение находить ошибки при чтении и парсинге данных
Опыт очистки и предобработки грязных данных

🔥 Отличная проверка на внимательность и глубину работы с Pandas!



group-telegram.com/machinelearning_interview/1787
Create:
Last Update:

🧩 Задача для продвинутых дата-сайентистов: "Парадоксальная корреляция"

📖 Описание задачи

У вас есть DataFrame df с данными о рекламных кампаниях:


import pandas as pd

data = {
'campaign_id': [1, 2, 3, 4, 5, 6],
'spend': [1000, 1500, 1200, None, 2000, 1700],
'revenue': [2000, 2300, 2500, 1800, None, 2700]
}

df = pd.DataFrame(data)
print(df)


Результат:


campaign_id spend revenue
0 1 1000.0 2000.0
1 2 1500.0 2300.0
2 3 1200.0 2500.0
3 4 NaN 1800.0
4 5 2000.0 NaN
5 6 1700.0 2700.0


Вам нужно посчитать корреляцию между spend и revenue.

Вы пишете:


correlation = df['spend'].corr(df['revenue'])
print(correlation)


И получаете:


nan


❗️Но вы уверены, что данные связаны (чем больше spend, тем больше revenue), а Pandas возвращает NaN.

📝 Ваша задача:

1. Почему Pandas возвращает NaN?
2. Как правильно посчитать корреляцию?
3. Как бы вы обработали такие данные в продакшн-пайплайне?

---

🎯 Подвох (ключевой момент):

Метод corr() автоматически игнорирует строки, где хотя бы одно значение NaN.

В этом DataFrame остаются только строки с индексами 0, 1, 2, 5.
→ На этих данных корреляция может быть рассчитана.

Но главная проблема — тип данных.

Если данные были считаны, например, из CSV, где пустые значения остались строками, то Pandas определит колонку как object, а не float64:


print(df.dtypes)


Вывод:


spend object
revenue object


И тогда corr() вернёт NaN, потому что не смог интерпретировать данные как числовые.

---

💡 Решение:

1. Проверить типы данных:

```python
print(df.dtypes)
```

2. Привести к числовому типу:

```python
df['spend'] = pd.to_numeric(df['spend'], errors='coerce')
df['revenue'] = pd.to_numeric(df['revenue'], errors='coerce')
```

3. Посчитать корреляцию без NaN:

```python
correlation = df[['spend', 'revenue']].dropna().corr().iloc[0, 1]
print(correlation)
```

Теперь корреляция рассчитана корректно.

---

🔥 Дополнительный подвох:

А что если CSV-файл считан с
delimiter=';', а данные внутри разделены запятыми?
→ Тогда весь DataFrame будет одной колонкой с типом object, а Pandas не сможет даже начать обработку.

---

📝 Что проверяет задача:

Понимание, как Pandas обрабатывает NaN и object
Внимательность к типам данных
Умение находить ошибки при чтении и парсинге данных
Опыт очистки и предобработки грязных данных

🔥 Отличная проверка на внимательность и глубину работы с Pandas!

BY Machine learning Interview


Warning: Undefined variable $i in /var/www/group-telegram/post.php on line 260

Share with your friend now:
group-telegram.com/machinelearning_interview/1787

View MORE
Open in Telegram


Telegram | DID YOU KNOW?

Date: |

False news often spreads via public groups, or chats, with potentially fatal effects. Anastasia Vlasova/Getty Images Investors took profits on Friday while they could ahead of the weekend, explained Tom Essaye, founder of Sevens Report Research. Saturday and Sunday could easily bring unfortunate news on the war front—and traders would rather be able to sell any recent winnings at Friday’s earlier prices than wait for a potentially lower price at Monday’s open. He said that since his platform does not have the capacity to check all channels, it may restrict some in Russia and Ukraine "for the duration of the conflict," but then reversed course hours later after many users complained that Telegram was an important source of information. Since January 2022, the SC has received a total of 47 complaints and enquiries on illegal investment schemes promoted through Telegram. These fraudulent schemes offer non-existent investment opportunities, promising very attractive and risk-free returns within a short span of time. They commonly offer unrealistic returns of as high as 1,000% within 24 hours or even within a few hours.
from us


Telegram Machine learning Interview
FROM American