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: |

And while money initially moved into stocks in the morning, capital moved out of safe-haven assets. The price of the 10-year Treasury note fell Friday, sending its yield up to 2% from a March closing low of 1.73%. On Feb. 27, however, he admitted from his Russian-language account that "Telegram channels are increasingly becoming a source of unverified information related to Ukrainian events." This ability to mix the public and the private, as well as the ability to use bots to engage with users has proved to be problematic. In early 2021, a database selling phone numbers pulled from Facebook was selling numbers for $20 per lookup. Similarly, security researchers found a network of deepfake bots on the platform that were generating images of people submitted by users to create non-consensual imagery, some of which involved children. "There are a lot of things that Telegram could have been doing this whole time. And they know exactly what they are and they've chosen not to do them. That's why I don't trust them," she said. Oh no. There’s a certain degree of myth-making around what exactly went on, so take everything that follows lightly. Telegram was originally launched as a side project by the Durov brothers, with Nikolai handling the coding and Pavel as CEO, while both were at VK.
from ca


Telegram Machine learning Interview
FROM American