Vienība 9 / 11

Automobiļu datu analīze, izmantojot Python: end-to-end

Ieguvumi:

  • Spēja izveidot atkārtojamu analīzes darbplūsmu, kas ielādē un notīra telemetrijas, testēšanas un ražošanas datus ar pandām
  • Spēja izprast un pārbaudīt izvadi pēc rindas, saņemot kodu, atribūtus un vizualizācijas palīdzību no mākslīgā intelekta
  • Spēja pārbaudīt analīzes rezultātus, lai nodrošinātu vienību konsekvenci, datu noplūdi un reproducējamību

Iepriekšējās vienībās mākslīgo intelektu izmantojām kā “padomnieku”. Šajā vienībā mēs ejam vienu soli tālāk un izveidojam darbplūsmu, kas analizē automobiļu datus ar savām rokām, izmantojot Python. Mērķis nav padarīt jūs par programmatūras izstrādātāju; Tā mērķis ir izveidot inženieri, kurš var saprast un pārbaudīt šo kodu rindiņu pa rindiņai, vienlaikus saņemot palīdzību no AI. Tā kā AI radītais kods var būt kļūdains, tāpat kā AI radītais teksts; var sajaukt skaļumu, noplūst datus, centrēt nepareizu kolonnu. Koda palaišana, to nesaprotot, ir kā neparakstīta pārskata publicēšana.

Python kāpēc? Tā kā tas ir de facto standarts datu analīzē: jūs varat viegli apstrādāt telemetrijas, testēšanas un ražošanas datus, izmantojot pandas (tabulu dati), numpy (ciparu apstrāde), matplotlib (grafika) un scikit-learn (mašīnmācīšanās) bibliotēkām.

Seši soļi līdz reproducējamai analīzei

Stingra analīze vienmēr ir balstīta uz to pašu sistēmu:

  1. Ielādēt: nolasīt datus no faila.
  2. Pārbaudīt: kategorija, kolonnas, datu tipi, trūkstošās vērtības.
  3. Tīrs: trūkst/izceļas, vienība, laikspiedola labojums.
  4. Izvilkšanas līdzeklis: iegūstiet nozīmīgus mainīgos.
  5. Analīze/modelis: statistika, vizualizācija vai modelis.
  6. Pārbaudiet un ziņojiet: Rezultātu nodrošināšana, apjoma/noplūdes pārbaude, ierakstīšana.
Padoms. Pieprasot AI kodu, sakiet "komentējiet, ko darāt katrā solī, un uzrakstiet savus pieņēmumus." Tātad jūs varat pārbaudīt kodu, kad to lasāt.

Soli pa solim piemērs: telemetrijas analīze

Šis kods ielādē CAN/telemetrijas ierakstu un veic pamata pārbaudi. (Piezīme: pārliecinieties, ka saprotat kodus pirms to palaišanas; kolonnu nosaukumi atšķiras atkarībā no jūsu datiem.)

importēt pandas kā pd# 1) Ielādēt: daļēji punktēts CSV, pirmās kolonnas timetampdf = pd.read_csv("telemetry.csv", parse_dates=["time"])# 2) Checkprint(df.shape) # cik rindu, cik kolonnu izdrukas(df.dtypes) # katras kolonnas veids (df.sum number) vērtības uz kolonnas nospiedumu(df.describe()) # statistikas kopsavilkums: min, max, vidējais

Apraksts () izvade ir jūsu pirmā iespēja pārbaudīt: ja dzinēja apgriezienu maksimālā vērtība ir 45 000 apgr./min (parastajam pasažieru dzinējam ~ 7000 apgr./min), ir ierīces vai sensora kļūme.

Visbiežāk izmantotās pandu komandas audita posmā un to darbības:

komandu

Ko dara

Ko tas apstiprina?

df.shape

Rindu/kolonnu skaits

Vai tas ir paredzētais izmērs?

df.dtypes

Kolonnu veidi

Vai skaitļu kolonna ir kļuvusi par tekstu?

df.isna().sum()

Trūkst vērtību skaita

Cik daudz vietas ir?

df.describe()

Min./maks./vid

Vai tas ir fiziski saprātīgi?

df.duplicated().sum()

rindas dublikāts

Vai pastāv dubultā reģistrācija?

# 3) Notīrīt: atzīmējiet fiziski neiespējamas vērtības

Uzmanību: nekavējoties neizdzēsiet nobīdi; Vispirms saprotiet, kāpēc tas ir izņēmums. Vai tas ir reāls notikums (pēkšņa sildīšana) vai sensora kļūme? Akli dzēšana var paslēpt patieso kļūdu.

# 4) Izvilkšanas līdzeklis: temperatūras paaugstināšanās ātrums (atvasinājums)df = df.sort_values("time")df["sic_increase_speed"] = df["motor_sic"].diff() / df["time"].diff().dt.total_seconds()#libpy. Vienkāršā vizualizācija pltplt.plot(df["laiks"], df["motor_sic"])plt.xlabel("Laiks"); plt.ylabel("Dzinēja temperatūra (C)")plt.title("Dzinēja temperatūras kurss")plt.show()

Datu noplūdes novēršana Python

Bīstamākā kļūda, veidojot prognozēšanas modeli, ir datu noplūde (5. vienība): kad modelis redz informāciju, ko prognozēšanas brīdī nevar zināt. Zelta likums, lai no tā izvairītos laika rindās: trenējieties ar pagātni, pārbaudiet ar nākotni — bez nejaušas jaukšanas.

no sklearn.model_selection import train_test_split# FALSE: nejauši sadalot laikrindas, tiek noplūdināta nākotne# df[df["laiks"] > slieksnis] # pēdējie 20% nākotne

Uzmanību: train_test_split pēc noklusējuma sajauc datus (shuffle = True). Laika rindās tas jauc nākotni ar izglītību un rada nepatiesu augstu rezultātu. Ja mākslīgais intelekts to ir izdarījis izstrādātajā kodā, noteikti izlabojiet to.

Vienības konsistence: klusais slepkava

Vismānīgākās kļūdas automobiļu rūpniecībā ir mērvienību kļūdas: km/h līdz m/s, Nm līdz lb-ft, bārs līdz kPa, °C līdz K. Analīzē saglabājot vārdnīcu par to, kāda ir katras kolonnas mērvienība, un pierakstot reklāmguvumus, skaidri izglābj dzīvības.

# Dokumentējiet mērvienības skaidri = {"ātrums": "km/h", "motor_sic": "C", "pressure": "bar"}# Skaidra pārveidošana, ja nepieciešams (km/h -> m/s)df["speed_ms"] = df["ātrums"] / 3.6

Mini gadījumu izpēte

1. gadījums — kļūda tika konstatēta ar description(). Analītiķis palaiž kodu no AI un veic diapazona aprēķinu; Rezultāts ir absurdi augsts. Apskatot description() izvadi, mēs redzam, ka akumulatora jauda dažās rindās ir ievadīta Wh, bet citās - kWh (1000 reižu atšķirība). Kad vienība ir saskaņota, rezultāts uzlabojas. Secinājums: vienkārša kopsavilkuma statistika novērsa sliktu prognozi.

2. gadījums — apjukuma slazds. Praktikanta bremžu nodiluma modelis testa komplektā bija 98% precīzs. Pārbaudot kodu, var redzēt, ka train_test_split(shuffle=True) un laikrindas ir sajauktas, kas nozīmē, ka turpmākie punkti nokļūst apmācībā. Dalot ar laiku, precizitāte samazinās līdz 80%, bet tagad tā ir reāla. Secinājums: tikai tāpēc, ka AI kods darbojās, tas nebija pareizi; Cilvēks notvēra noplūdi.

3. gadījums – Izpratne par izņēmumu. Izturības ierakstā AI kods automātiski izdzēš novirzes no deformācijas vērtības. Inženieris apskata dzēstos punktus; Tie bija tieši tie kreka ierosināšanas brīži, kas interesēja testu. Dzēšana tiek noņemta, un pārkāpumi tiek izskatīti atsevišķi. Rezultāts: Sadaļā "Tīrīšana" var izdzēst reālo signālu; jautājums ik uz soļa.

uzvedņu veidnes

1. veidne — Pieprasīt kodu (ar paskaidrojumu):

Loma: Jūs esat Python datu analītiķa mentors.Uzdevums: Uzrakstiet kodu, kas ielādē un pārbauda telemetrijas CSV.Konteksts: Kolonnas: laiks, ātrums(km/h), engine_sic(C), apgriezieni(rpm).Ierobežojums: komentējiet katru rindu; Paskaidrojiet, kura pārbaude tika veikta un kāpēc; pievienot fiziski neiespējamu vērtību pārbaudi; klusi nedzēšot neko.Izvade: Komentēts kods + kuru izvadi man vajadzētu apskatīt un kāpēc.

2. veidne — noplūdes pārbaude:

Loma: jūs esat mašīnmācīšanās kodu pārskatītājs. Uzdevums: pārbaudiet, vai tālāk norādītajā apmācības/pārbaudes sadalījuma kodā nav datu noplūdes. Konteksts: šī ir laika rinda (transportlīdzekļa telemetrija). Ierobežojums: brīdināt, ja notiek nejauša sajaukšana; Iesakiet un pamatojiet sadalīšanu pēc laika. Rezultāts: secinājumi + izlabots kods + skaidrojums.

3. veidne — vienības apstiprināšana:

Loma: Jūs esat datu kvalitātes auditors.Uzdevums: Iesakiet pārbaudes, kas meklē vienību neatbilstību DataFrame.Konteksts: jauda var būt kWh dažās rindās un Wh citās.Izvade: pārbaudiet kodu + kā atrast aizdomīgo modeli.

4. veidne — vizualizācija + komentārs:

Loma: Jūs esat datu vizualizācijas eksperts. Uzdevums: Uzrakstiet kodu, kas attēlo dzinēja temperatūras gaitu un pieauguma ātrumu. Ierobežojums: marķējiet asis ar vienību; vizuāli atzīmējiet anomāliju; nepretendējiet uz galīgu vainu, interpretējot grafiku. Izvade: Kods + ko meklēt grafikā.

Vāja uzvedne / spēcīga uzvedne

Vāja uzvedne:

Izveidojiet modeli, izmantojot šos datus.

Nav skaidrs, kurš mērķis, kurš nodalījums, kura pārbaude; AI var izvadīt kodētu, necaurlaidīgu, vienību aklo kodu.

Spēcīga uzvedne:

Loma: Jūs esat Python ML mentors. Uzdevums: Uzrakstiet sākotnējo darbplūsmu, lai prognozētu bremžu kluču nodilumu un parādītu validācijas nepilnības. Konteksts: laikrindu telemetrija; mērķis: atlikušais spilventiņu biezums. Ierobežojums: sadaliet laika rindas pēc laika (bez jaukšanas); karoga atribūti, kuriem ir datu noplūdes risks; dokumentu vienības; interpretēt katru soli; Pierakstiet, kādas pārbaudes ir jāveic, pirms rezultāts tiek parādīts laukā. Izvade: Komentēts kods + verifikācijas kontrolsaraksts.

Biežas kļūdas

  • Palaižot kodu, to nesaprotot. AI kods var būt arī kļūdains; Lasiet rindiņu pa rindiņai.
  • Laika rindu sajaukšana. shuffle=True nopludina nākotni un rada viltus rezultātu.
  • Akli izdzēsiet nobīdi. Faktisko signālu (bojājuma sākumu) var izdzēst.
  • Nedokumentē vienību. Kļūdas, piemēram, km/h pret m/s, Wh vs kWh, pieaug klusi.
  • Apraksta()/pārbaudes darbības izlaišana. Lielākā daļa kļūdu parādās pirmajā statistikas kopsavilkumā.

Rezumējot

  • Python (pandas, numpy, matplotlib, scikit-learn) ir de facto automobiļu datu analīzes standarts.
  • Atkārtojama analīze: ielādējiet, pārbaudiet, notīriet, iezīmējiet, analizējiet, apstipriniet un ziņojiet.
  • Ir obligāti jāsaprot un jāpārbauda kods, ko AI rada rindu pa rindiņai; Tas, ka tas darbojas, nenozīmē, ka tas ir pareizi.
  • Saglabāt pagātnes/nākotnes atšķirību laika rindās; Jaukšana nejauši rada datu noplūdi.
  • Vienību konsekvence un izņēmuma interpretācija ir klusi, bet kritiski verifikācijas punkti.

Lietojumprogrammas uzdevums

Paņemiet nelielu datu kopu (reālu vai sintētisku telemetriju). (1) Ievērojot sešu soļu sistēmu, ģenerējiet ielādes un kontroles kodu ar 1. veidni un apstipriniet, ka saprotat katru rindiņu. (2) Atrodiet vismaz vienu aizdomīgu vērtību apraksta() izvadē un izpētiet, kāpēc. (3) Paredzēšanas uzdevumā nosakiet apmācības/pārbaudes sadalījumu un pārbaudiet noplūdes risku, izmantojot 2. veidni. (4) Dokumentējiet vārdnīcā katras izmantotās kolonnas vienību.

kontrolsaraksts

  • [ ] Es iestatīju analīzi ar sešpakāpju sistēmu.
  • [ ] Es izlasīju un sapratu AI radīto kodu rindu pa rindiņai.
  • [ ] Es meklēju aizdomīgas vērtības ar description()/audit.
  • [ ] Es sadalīju laikrindas pēc laika (bez jaukšanas).
  • [ ] Es atzīmēju atribūtus, kuriem ir datu noplūdes risks.
  • [ ] Es dokumentēju katras kolonnas mērvienību un skaidri uzrakstīju reklāmguvumus.