Curățarea și îmbunătățirea datelor

Machine Learning pentru Date de Tip Șir de Timp în Python

Chris Holdgraf

Fellow, Berkeley Institute for Data Science

Datele sunt dezordonate

  • Datele reale sunt adesea dezordonate
  • Cele mai frecvente probleme sunt datele lipsă și valorile aberante
  • Acestea apar din erori umane, defecțiuni ale senzorilor, eșecuri ale bazelor de date etc.
  • Vizualizarea datelor brute facilitează identificarea acestor probleme
Machine Learning pentru Date de Tip Șir de Timp în Python

Cum arată datele dezordonate

Machine Learning pentru Date de Tip Șir de Timp în Python

Interpolarea: completarea datelor lipsă folosind timpul

  • O metodă frecventă pentru datele lipsă este interpolarea valorilor absente
  • În cazul seriilor de timp, puteți folosi timpul pentru a asista interpolarea.
  • Interpolarea înseamnă utilizarea valorilor cunoscute de o parte și de alta a unui interval lipsă pentru a estima valorile absente.
Machine Learning pentru Date de Tip Șir de Timp în Python

Interpolarea în Pandas

# Return a boolean that notes where missing values are
missing = prices.isna()

# Interpolate linearly within missing windows
prices_interp = prices.interpolate('linear')

# Plot the interpolated data in red and the data w/ missing values in black
ax = prices_interp.plot(c='r')
prices.plot(c='k', ax=ax, lw=2)
Machine Learning pentru Date de Tip Șir de Timp în Python

Vizualizarea datelor interpolate

Machine Learning pentru Date de Tip Șir de Timp în Python

Transformarea datelor cu ferestre mobile

  • O altă utilizare comună a ferestrelor mobile este transformarea datelor
  • Am făcut deja acest lucru o dată, pentru a netezi datele
  • Totuși, putem efectua și transformări mai complexe
Machine Learning pentru Date de Tip Șir de Timp în Python

Transformarea datelor pentru standardizarea varianței

  • O transformare frecventă este standardizarea mediei și varianței în timp. Există mai multe metode.
  • Vom arăta cum să convertiți fiecare punct în % de variație față de fereastra anterioară.
  • Aceasta face punctele de timp mai comparabile dacă valorile absolute se modifică semnificativ
Machine Learning pentru Date de Tip Șir de Timp în Python

Transformarea în variație procentuală cu Pandas

def percent_change(values):
    """Calculates the % change between the last value 
    and the mean of previous values"""
    # Separate the last value and all previous values into variables
    previous_values = values[:-1]
    last_value = values[-1]

    # Calculate the % difference between the last value 
    # and the mean of earlier values
    percent_change = (last_value - np.mean(previous_values)) \
    / np.mean(previous_values)
    return percent_change
Machine Learning pentru Date de Tip Șir de Timp în Python

Aplicarea pe datele noastre

# Plot the raw data
fig, axs = plt.subplots(1, 2, figsize=(10, 5))
ax = prices.plot(ax=axs[0])

# Calculate % change and plot
ax = prices.rolling(window=20).aggregate(percent_change).plot(ax=axs[1])
ax.legend_.set_visible(False)

Machine Learning pentru Date de Tip Șir de Timp în Python

Identificarea valorilor aberante

  • Valorile aberante sunt puncte de date semnificativ diferite din punct de vedere statistic față de restul setului.
  • Pot afecta negativ puterea predictivă a modelului, distorsionând rezultatele față de valoarea „reală"
  • O soluție este eliminarea sau înlocuirea valorilor aberante cu o valoare mai reprezentativă

Fiți foarte atenți — este adesea dificil de stabilit ce reprezintă o valoare extremă legitimă față de o abatere

Machine Learning pentru Date de Tip Șir de Timp în Python

Reprezentarea unui prag pe date

fig, axs = plt.subplots(1, 2, figsize=(10, 5))
for data, ax in zip([prices, prices_perc_change], axs):
    # Calculate the mean / standard deviation for the data
    this_mean = data.mean()
    this_std = data.std()

    # Plot the data, with a window that is 3 standard deviations 
    # around the mean
    data.plot(ax=ax)
    ax.axhline(this_mean + this_std * 3, ls='--', c='r')
    ax.axhline(this_mean - this_std * 3, ls='--', c='r')
Machine Learning pentru Date de Tip Șir de Timp în Python

Vizualizarea pragurilor pentru valori aberante

Machine Learning pentru Date de Tip Șir de Timp în Python

Înlocuirea valorilor aberante folosind pragul

# Center the data so the mean is 0
prices_outlier_centered = prices_outlier_perc - prices_outlier_perc.mean()

# Calculate standard deviation
std = prices_outlier_perc.std()

# Use the absolute value of each datapoint 
# to make it easier to find outliers
outliers = np.abs(prices_outlier_centered) > (std * 3)

# Replace outliers with the median value
# We'll use np.nanmean since there may be nans around the outliers
prices_outlier_fixed = prices_outlier_centered.copy()
prices_outlier_fixed[outliers] = np.nanmedian(prices_outlier_fixed)

Machine Learning pentru Date de Tip Șir de Timp în Python

Vizualizarea rezultatelor

fig, axs = plt.subplots(1, 2, figsize=(10, 5))
prices_outlier_centered.plot(ax=axs[0])
prices_outlier_fixed.plot(ax=axs[1])

Machine Learning pentru Date de Tip Șir de Timp în Python

Să exersăm!

Machine Learning pentru Date de Tip Șir de Timp în Python

Preparing Video For Download...