1ce105yeodmtm1zzsqch0bg.png

1. ¿Qué trucos hace PCA?

En resumen, PCA resume los datos encontrando combinaciones lineales de características, lo que se puede considerar como tomar varias fotografías de un objeto 3D y, naturalmente, ordenará las imágenes desde la más representativa hasta la menos representativa antes de entregárselas.

Dado que la entrada son nuestros datos originales, habría 2 salidas útiles de PCA: z y W.. Multiplicándolos, podemos obtener los datos de reconstrucción, que son los datos originales pero con una pérdida de información tolerable (ya que hemos reducido la dimensionalidad).

Explicaremos estas 2 matrices de salida con nuestros datos en la práctica siguiente.

2. ¿Qué podemos hacer después de aplicar PCA?

Después de aplicar PCA a nuestros datos para reducir la dimensionalidad, podemos usarlo para otras tareas de aprendizaje automático, como agrupación, clasificación y regresión.

En el caso del MRT de Taipei más adelante en este artículo, realizaremos agrupaciones en los datos de dimensiones inferiores, donde algunas dimensiones pueden interpretarse como proporciones de pasajeros en diferentes partes del día, como la mañana, el mediodía y la noche. Esas estaciones comparten proporciones similares de pasajeros durante el día y se considerarían que están en el mismo grupo (¡sus patrones son similares!).

3. Echa un vistazo nuestro conjunto de datos de tráfico!

Los datos que utilizamos aquí son Sistema de tránsito rápido del metro de Taipei, datos de tráfico por horacon columnas: date, hour, origin, destination, passenger_count.

En nuestro caso, mantendré solo los datos de los días laborables, ya que hay patrones más interesantes entre las diferentes estaciones durante los días laborables, como las estaciones en áreas residenciales pueden tener más viajeros entrando durante el día, mientras que por la noche, aquellas en áreas comerciales pueden tener más gente entrando.

Las estaciones en áreas residenciales pueden tener más viajeros ingresando durante el día.

El gráfico de arriba muestra la tendencia del tráfico por hora de 4 estaciones diferentes (la cantidad de pasajeros que ingresan a la estación). Las 2 líneas en rojo son Xinpu y Yongan Market, que en realidad están ubicadas en las áreas súper concurridas de la ciudad de Nuevo Taipei. Por otro lado, las 2 líneas en azul son el Ayuntamiento de Taipei y Zhongxiao Fuxing, donde se ubican la mayoría de las empresas y se desarrollan las actividades comerciales.

Las tendencias reflejan tanto la naturaleza de estas áreas como de las estaciones, y podemos notar que la diferencia es más obvia al comparar sus tendencias durante las horas de viaje (de 7 a 9 a. m. y de 17 a 19 p. m.).

4. Uso de PCA en datos de tráfico por horas

¿Por qué reducir la dimensionalidad antes de realizar más tareas de aprendizaje automático?

Hay 2 razones principales:

  1. A medida que aumenta el número de dimensionesla distancia entre dos puntos de datos cualesquiera se vuelve más cercana y, por lo tanto, más similar y menos significativoque se conocería como «la maldición de la dimensionalidad».
  2. Debido a la de alta dimensión naturaleza de los datos de tráfico, es difícil de visualizar e interpretar.

Al aplicar PCA, podemos identificar las horas en las que las tendencias de tráfico de diferentes estaciones son más obvias y representativas. Intuitivamente, según el gráfico mostrado anteriormente, podemos suponer que las horas alrededor de las 8 a. m. y las 18 p. m. pueden ser lo suficientemente representativas como para agrupar las estaciones.

Recuerde que mencionamos las útiles matrices de salida, Z y W, de PCA en el sección previa? Aquí vamos a interpretarlos con nuestro caso MRT.

Datos originales, X

  • Índice : starions
  • Columna: horas
  • Valores: la proporción de pasajeros que ingresan en la hora específica (#pasajeros / #pasajeros totales)

Con tal X, podemos aplicar PCA mediante el siguiente código:

from sklearn.decomposition import PCA

n_components = 3
pca = PCA(n_components=n_components)

X_tran = StandardScaler().fit_transform(X)

pca = PCA(n_components=n_components, whiten=True, random_state=0)
pca.fit(X_tran)

Aquí especificamos el parámetro n_componentes ser 3, lo que implica que PCA extraerá los 3 componentes más importantes para nosotros.

Tenga en cuenta que es como «tomar varias fotografías de un objeto 3D y ordenará las imágenes desde la más representativa hasta la menos representativa,” y elegimos las 3 primeras imágenes. Entonces, si establecemos n_componentes Para ser 5, obtendremos 2 fotos más, ¡pero nuestro top 3 seguirá siendo el mismo!

Salida PCA, matriz W

W. Se puede considerar como los pesos de cada característica (es decir, horas) con respecto a nuestras “imágenes”, o más específicamente, componentes principales.

pd.set_option('precision', 2)

W = pca.components_
W_df = pd.DataFrame(W, columns=hour_mapper.keys(), index=[f'PC_{i}' for i in range(1, n_components+1)])
W_df.round(2).style.background_gradient(cmap='Blues')

Para nuestros 3 componentes principales, podemos ver que PC_1 pesa más en las horas de la noche, mientras que PC_2 pesa más al mediodía y PC_3 pesa más en las horas de la mañana.

Salida PCA, matriz Z

podemos interpretar z matriz como las representaciones de estaciones.

Z = pca.fit_transform(X)

# Name the PCs according to the insights on W matrix
Z_df = pd.DataFrame(Z, index=origin_mapper.keys(), columns=['Night', 'Noon', 'Morning'])

# Look at the stations we demonstrated earlier
Z_df = Z_df.loc[['Zhongxiao_Fuxing', 'Taipei_City_Hall', 'Xinpu', 'Yongan_Market'], :]
Z_df.style.background_gradient(cmap='Blues', axis=1)

En nuestro caso, como hemos interpretado la matriz W y entendemos el significado latente de cada componente, podemos asignar nombres a las PC.

La matriz Z para estas 4 estaciones indica que las 2 primeras estaciones tienen mayor proporción de horas nocturnas, mientras que las otras 2 tienen más horas de mañana. Esta distribución también respalda los hallazgos de nuestra EDA (recuerde el gráfico de líneas de estas 4 estaciones en la parte anterior).

5. Agrupación del resultado de PCA con K-Means

Después de obtener el resultado del PCA, agruparemos aún más las estaciones de tránsito según sus patrones de tráfico, que están representados por 3 componentes principales.

En la última sección, la matriz Z tiene representaciones de estaciones con respecto a la noche, el mediodía y la mañana.

Agruparemos las estaciones según estas representaciones, de modo que las estaciones del mismo grupo tengan distribuciones de pasajeros similares entre estos 3 períodos.

Hay muchos métodos de agrupamiento, como K-Means, DBSCAN, agrupamiento jerárquico, etc. Dado que el tema principal aquí es ver la conveniencia de PCA, omitiremos el proceso de experimentar qué método es más adecuado e iremos con K-medias.

from sklearn.cluster import KMeans

# Fit Z matrix to K-Means model
kmeans = KMeans(n_clusters=3)
kmeans.fit(Z)

Después de ajustar el modelo K-Means, visualicemos los grupos con un diagrama de dispersión 3D mediante tramamente.

import plotly.express as px

cluster_df = pd.DataFrame(Z, columns=['PC1', 'PC2', 'PC3']).reset_index()

# Turn the labels from integers to strings,
# such that it can be treated as discrete numbers in the plot.
cluster_df['label'] = kmeans.labels_
cluster_df['label'] = cluster_df['label'].astype(str)

fig = px.scatter_3d(cluster_df, x='PC1', y='PC2', z='PC3',
color='label',
hover_data={"origin": (pca_df['index'])},
labels={
"PC1": "Night",
"PC2": "Noon",
"PC3": "Morning",
},
opacity=0.7,
size_max=1,
width = 800, height = 500
).update_layout(margin=dict(l=0, r=0, b=0, t=0)
).update_traces(marker_size = 5)

6. Información sobre el tráfico del MRT de Taipei: resultados de agrupación

  • Grupo 0 : Más pasajeros durante el día, por lo que puede ser el grupo “zona de estar”.
  • Grupo 2 : Más pasajeros por la noche, por lo que puede ser el grupo “zona de negocios”.
  • Grupo 1 : Tanto el día como la noche están llenos de gente entrando a las estaciones, y es más complicado explicar la naturaleza de estas estaciones, ya que podría haber diferentes razones para diferentes estaciones. A continuación, analizaremos dos casos extremos en este grupo.

Por ejemplo, en Grupo 1, la estación con la mayor cantidad de pasajeros, la Estación Principal de Taipei, es un enorme centro de tránsito en Taipei, donde los viajeros pueden hacer transbordo desde autobuses y sistemas ferroviarios al MRT aquí. Por lo tanto, el patrón de alto tráfico durante la mañana y la tarde es claro.

Por el contrario, la estación del Zoológico de Taipei también está en el Grupo 1, pero no es el caso de que “tanto el día como la noche estén llenos de gente”. En cambio, no hay mucha gente en ninguno de los períodos porque pocos residentes viven en esa área y la mayoría de los ciudadanos rara vez visitan el Zoológico de Taipei entre semana.

Los patrones de estas 2 estaciones no son muy parecidos, aunque están en el mismo grupo. Es decir, el grupo 1 podría contener demasiadas estaciones que en realidad no son similares. Por lo tanto, en el futuro, tendríamos que ajustar los hiperparámetros de K-Means, como el número de grupos, y métodos como puntuación de silueta y método del codo sería de ayuda.