одиниця 9 / 11

Аналіз автомобільних даних за допомогою Python: наскрізний

Прибуток:

  • Можливість створити повторюваний робочий процес аналізу, який завантажує та очищає телеметричні, тестові та виробничі дані за допомогою pandas
  • Можливість розуміти та перевіряти вихідні дані рядок за рядком, отримуючи код, атрибути та допомогу у візуалізації від штучного інтелекту
  • Можливість перевірки результатів аналізу на узгодженість одиниць, витік даних і відтворюваність

У попередніх підрозділах ми використовували штучний інтелект як «порадника». У цьому підрозділі ми робимо ще один крок далі та створюємо робочий процес, який аналізує автомобільні дані своїми руками за допомогою Python. Мета полягає не в тому, щоб зробити вас розробником програмного забезпечення; Це створення інженера, який може розуміти та перевіряти цей код рядок за рядком, отримуючи допомогу в коді від ШІ. Оскільки код, створений штучним інтелектом, може бути несправним, як і текст, створений штучним інтелектом; може переплутати том, витік даних, неправильний стовпець у центрі. Запуск коду, не розуміючи його, схожий на публікацію непідписаного звіту.

Чому Python? Тому що це фактичний стандарт аналізу даних: ви можете легко обробляти телеметричні, тестові та виробничі дані за допомогою бібліотек pandas (табличні дані), numpy (числова обробка), matplotlib (графіка) і scikit-learn (машинне навчання).

Шість кроків до відтворюваного аналізу

Надійний аналіз завжди дотримується однієї і тієї ж структури:

  1. Завантажити: читати дані з файлу.
  2. Перегляньте: розмір, стовпці, типи даних, відсутні значення.
  3. Чисто: відсутні/викиди, одиниця вимірювання, виправлення позначки часу.
  4. Функція вилучення: виведення значущих змінних.
  5. Аналіз/модель: статистика, візуалізація або модель.
  6. Перевірка та звіт: надання результатів, перевірка обсягу/витоків, запис.
Порада: запитуючи у ШІ код, скажіть «прокоментуйте, що ви робите на кожному кроці, і напишіть свої припущення». Тож ви можете перевірити код під час його читання.

Покроковий приклад: аналіз телеметрії

Наступний код завантажує запис CAN/телеметрії та виконує базову перевірку. (Примітка: переконайтеся, що ви розумієте коди, перш ніж запускати їх; назви стовпців відрізняються залежно від ваших даних.)

імпортувати панди як pd# 1) Завантажити: напівпунктирний CSV, перший стовпець timestampdf = pd.read_csv("telemetry.csv", parse_dates=["time"])# 2) Checkprint(df.shape) # скільки рядків, скільки стовпцівprint(df.dtypes) # тип кожного стовпця (число або text)print(df.isna().sum()) # кількість відсутніх значень у стовпціprint(df.describe()) # підсумкова статистика: min, max, average

Вихід describe() — це ваша перша можливість перевірити: якщо максимальне значення швидкості двигуна становить 45 000 об/хв (типовий пасажирський двигун ~7 000 об/хв), виникла несправність пристрою або датчика.

Команди pandas, які найчастіше використовуються на етапі аудиту, і що вони роблять:

команда

Що робить

Що це підтверджує?

df.форма

Кількість рядків/стовпців

Це очікуваний розмір?

df.dtypes

Типи колонок

Стовпець з числами став текстом?

df.isna().sum()

Відсутня кількість значень

Скільки там місця?

df.describe()

Мін./макс./середнє

Чи це фізично розумно?

df.duplicated().sum()

дубльований рядок

Чи існує подвійна реєстрація?

# 3) Очистити: позначити фізично неможливі значення

Застереження: не видаляйте викид негайно; Спочатку зрозумійте, чому це викид. Це реальна подія (раптове нагрівання) чи несправність датчика? Видалення наосліп може приховати справжню помилку.

# 4) Функція вилучення: швидкість підвищення температури (похідна)df = df.sort_values("time")df["sic_increase_speed"] = df["motor_sic"].diff() / df["time"].diff().dt.total_seconds()# 5) Проста візуалізація імпортує matplotlib.pyplot як pltplt.plot(df["час"], df["motor_sic"])plt.xlabel("Час"); plt.ylabel("Температура двигуна (C)")plt.title("Зміна температури двигуна")plt.show()

Запобігання витоку даних у Python

Найнебезпечнішою помилкою при побудові моделі прогнозування є витік даних (блок 5): коли модель бачить інформацію, яка не може бути відома на момент прогнозування. Золоте правило, щоб уникнути цього в часових рядах: тренуйтеся з минулим, перевіряйте з майбутнім — жодного випадкового перетасування.

from sklearn.model_selection import train_test_split# FALSE: випадкове поділ часового ряду призводить до витоку майбутнього# df[df["time"] > threshold] # останні 20% майбутнього

Застереження: train_test_split перемішує дані за замовчуванням (shuffle=True). У часових рядах це плутає майбутнє з освітою та створює помилковий високий бал. Якщо штучний інтелект зробив це у коді, який він створює, обов’язково виправте це.

Послідовність одиниць: тихий вбивця

Найпідступніші помилки в автомобілебудуванні – це помилки одиниць вимірювання: км/год у м/с, Нм у фунт-фут, бар у кПа, °C у К. Ведення словника одиниць вимірювання в кожному стовпчику в аналізі та записування перетворень явно рятує життя.

# Явно задокументуйте одиниці = {"speed": "km/h", "motor_sic": "C", "pressure": "bar"}# Явне перетворення, якщо необхідно (км/год -> м/с)df["speed_ms"] = df["speed"] / 3.6

Міні кейси

Випадок 1. Помилка виявлена за допомогою describe(). Аналітик запускає код з AI і робить оцінку діапазону; Результат абсурдно високий. Коли ми дивимося на вихідні дані describe(), ми бачимо, що ємність батареї вводиться в Вт-год в деяких рядках і в кВт-год в інших (різниця в 1000 разів). При доведенні агрегату до однорідного вигляду результат покращується. Висновок: проста підсумкова статистика запобігла поганому прогнозу.

Випадок 2 - Пастка для плутанини. Модель зносу гальм стажера виявилася точною на 98% на тестовому наборі. Під час перевірки коду можна побачити, що train_test_split(shuffle=True) і часові ряди змішані, що означає, що майбутні точки витікають у навчання. Якщо поділити на час, точність падає до 80%, але тепер це реально. Висновок: тільки тому, що код штучного інтелекту працював, це було неправильно; Людина помітила витік.

Випадок 3 – Розуміння викиду. У записі про довговічність код штучного інтелекту автоматично видаляє викидні значення деформації. Інженер дивиться на видалені точки; Це були саме ті моменти ініціації злому, які цікавили тест. Видалення видаляється, а порушення виносяться на окремий розгляд. Результат: у розділі «Очищення» справжній сигнал можна видалити; питання кожен крок.

шаблони підказок

Шаблон 1 - Код запиту (з поясненням):

Роль: Ви наставник аналітика даних Python. Завдання: Написати код, який завантажує та перевіряє CSV телеметрії. Контекст: Стовпці: час, швидкість (км/год), engine_sic (C), оберти (об/хв). Обмеження: Закоментуйте кожен рядок; Поясніть, яка перевірка була проведена і чому; додати фізично неможливу перевірку вартості; мовчки нічого не видаляючи. Вихід: код із коментарями + який вивід я маю переглянути та чому.

Шаблон 2 - перевірка витоків:

Роль: ви рецензент коду машинного навчання. Завдання: перевірте наступний навчальний/тестовий спліт-код на предмет витоку даних. Контекст: це часовий ряд (телеметрія автомобіля). Обмеження: попереджати, якщо відбувається випадкове перемішування; Запропонуйте та обґрунтуйте поділ за часом. Результат: висновки + виправлений код + пояснення.

Шаблон 3 - Перевірка одиниці:

Роль: Ви аудитор якості даних. Завдання: Запропонуйте перевірки, які шукають невідповідність одиниць у DataFrame. Контекст: Ємність може бути кВт-год в одних рядках і Вт-год в інших. Результат: перевірити код + як знайти підозрілий шаблон.

Шаблон 4 - Візуалізація + коментар:

Посада: Ви експерт із візуалізації даних. Завдання: написати код, який відображає хід температури двигуна та швидкість її підвищення. Обмеження: позначте осі одиницею; візуально позначити аномалію; не вимагайте остаточної помилки під час інтерпретації графіка. Результат: Код + що шукати на графіку.

Слабка підказка / Сильна підказка

Слабка підказка:

Побудуйте модель з цими даними.

Незрозуміло, яка ціль, який відсік, яка перевірка; ШІ може виводити зашифрований, непроникний, сліпий код.

Потужна підказка:

Роль: Ви наставник Python ML. Завдання: написати початковий робочий процес для прогнозування зносу гальмівних колодок і продемонструвати підводні камені перевірки. Контекст: телеметрія часових рядів; ціль: товщина прокладки, що залишилася. Обмеження: розділити часові ряди за часом (без перетасування); атрибути прапора під загрозою витоку даних; одиниці документа; інтерпретувати кожен крок; Запишіть, які перевірки потрібні, перш ніж результат буде видано на поле. Вихід: код із коментарями + контрольний список перевірки.

Поширені помилки

  • Запуск коду, не розуміючи його. ШІ-код також може бути несправним; Прочитайте рядок за рядком.
  • Змішування часових рядів. shuffle=True витікає в майбутнє та створює фальшиву оцінку.
  • Сліпо видаліть викид. Фактичний сигнал (початок несправності) можна стерти.
  • Без документування агрегату. Помилки, як-от км/год проти м/с, Вт-год проти кВт-год зростають тихо.
  • Пропуск кроку describe()/check. Більшість помилок з’являється в першій підсумковій статистиці.

Підсумовуючи

  • Python (pandas, numpy, matplotlib, scikit-learn) є де-факто стандартом аналізу автомобільних даних.
  • Повторюваний аналіз: завантаження, перевірка, очищення, характеристика, аналіз, перевірка та звіт.
  • Вкрай важливо розуміти та перевіряти код, який ШІ створює рядок за рядком; Те, що це працює, не означає, що це правильно.
  • Підтримуйте відмінності між минулим і майбутнім у часових рядах; Випадкове перемішування створює витік даних.
  • Узгодженість одиниць і інтерпретація викидів є мовчазними, але критичними точками перевірки.

Аплікаційне завдання

Візьміть невеликий набір даних (реальна або синтетична телеметрія). (1) Дотримуючись шестиетапної структури, згенеруйте код завантаження та керування за допомогою шаблону 1 і підтвердьте, що ви розумієте кожен рядок. (2) Знайти принаймні одне підозріле значення у виводі describe() і дослідити причину. (3) У завданні прогнозування визначте час для навчання/тесту та перевірте ризик витоку за допомогою Шаблону 2. (4) Задокументуйте одиниці вимірювання в кожному стовпчику, який ви використовуєте, у словнику.

контрольний список

  • [ ] Я налаштував аналіз із шестиетапною структурою.
  • [ ] Я прочитав і зрозумів код, створений ШІ рядок за рядком.
  • [ ] Я шукав підозрілі значення за допомогою describe()/audit.
  • [ ] Я розділив часовий ряд за часом (без перетасування).
  • [ ] Я позначив атрибути, яким загрожує витік даних.
  • [ ] Я задокументував одиницю вимірювання кожного стовпця та чітко написав перетворення.