Introducción al análisis de datos con Python

Objetivos:

1.- Utilizar conceptos que ya conocen, e.g., el de una recta, para introducirnos en Python.

2.- Visualizar lo que significa miminimizar una función de riesgo, argumento que está detrás de ML:

Relación lineal

Analizar el precio $mt^2$ de la vivienda y el tamaño de la vivienda. En un papel en blanco, contestar a estas tres preguntas:

1.- Dibujar una linea recta entre el precio por $mt^2$ y el tamaño de la vivienda.
2.- ¿Qué dice esta regla?
3.- Si Y es el precio del $mt^2$, X el tamaño de la vivienda, escriba la ecuación de la recta que usted utilizó para realizar el gráfico arriba.
4.- ¿Qué información me reporta esta ecuación de la recta?

Ahora vamos a traducir lo que usted acaba de hacer a Python

Para ello vamos a importar dos modulos o paquetes que nos permitan graficar y crear datos

Lo que en R sería library(paquete), por ejemplo, en Python es import paquete

¿Qué es esa recta -modelo- que hemos dibujado?

$$Y \stackrel{\hbox{f}}{\leftarrow}X$$

¿Por qué es bueno tener un modelo; una regla que relacione los inputs o las variables de control con los outputs o variables dependientes?

¿Es posible expresar esta regla en lenguaje matemático, i.e., con formulas?

¿Que representa cada alemento en esta función?

Análisis de datos: encontrar estos parámetros que definen la recta

Antes, veamos como distintos parámetros -rectas- pueden hacernos tomar distintas decisiones

Análisis de datos: buscar los parámetros que definen la recta

Primera alternativa: por dos puntos, pasa una recta.

Según lo que hemos aprendido en primero de escuela, bastarían dos puntos para graficar una recta.

Bueno, utilicemos este prodecimiendo: agarremos el periódico y saquemos dos apartamentos, tamaño y precios

Con ello, hagamos el gráfico.

Algoritmo

Dado mi modelo lineal, debería buscar algun algoritmo para poder conocer misa parámetors, i.e., alguna sucesion de pasos que vincule lo que observo y lo que no observo.

Algoritmo:

La función: $Y = f(X; b,w) = b + w \times X$ tiene que satisfacer: $Y_0 = f(X_0; b,w) = b + w X_0$

La función, el modelo, tiene que pasar por el punto.

Si tengo dos puntos:

$$ Y_0 = b + w X_0 \\ Y_1 = b + w X_1 $$

Tengo 2 ecuaciones con dos incógnitas: despejo para encontrar los parámetros

De lo que observo, puedo identificar los parámetros que no conozco.

$$ w = \frac{Y_1 - Y_0}{X_1-X_0} \\ $$

entonces $$ b = Y_0 - w X_0 $$

En otras palabras, me valen solo dos observaciones para encontrar los dos parámetros de la recta.

Entonces, vamos a construirnos en Python este algoritmo como una función

Pseudo-codigo

1.- Escribir una función

2.- Inputs: coordenadas de los puntos.

2.- Utilizar las ecuaciones para obtener los parámetros

3.- Output: los parámetros de la ecuación de la recta.

Veamos si el algoritmo funciona

Pregunta:

Una inmobiliaria: ¿aceptaría que le vendieramos esta regla para predecir el valor del precio de un piso dado su tamaño?

Análisis de datos

Objetivo:

Bueno, si con dos puntos no parece razonable, busquemos 3 apartamentos.

¿Cuantas rectas pasan por 3 puntos?

Itertools es una fábrica de lazy iterators: vermos los conceptos de iterables, iteradores y generadores.

Vamos a utilizar esta combinación de indices para realizar todos los gráficos que pasan por los puntos

Como tenemos que hace lo mismo varias veces, vamos a utilizar un loop

¿Cuál es la recta que mejor ajusta a estos 3 puntos?

En otras palabras, ¿cuál es la mejor predicción a partir de estos tres puntos que le daremos al gerente de la empresa inmobiliaria?

Objetivo: encontrar la recta que mejor ajusta a estos tres puntos

¿En qué sentido: mejor ajusta?

Vamos a elegir una media: minimizar el error de predicción (cuadrático)

El error cuadrático se define como la distancia entre lo que quiero predecir y cómo lo predigo: entre el precio por $mt^2$ y la recta que utilizo para predecirlo, $b + w \times X$: $$ (Y_i - (b + w \times X_i))^2 $$

Quiero minimizar esta distancia para las 3 observaciones. En otras palablras, lo que busco es mimnimizar el error cuadratico medio:

$$ min_{b,w} \frac{1}{3}\sum_{i=1}^{3} (Y_i - (b + w \times X_i))^2 $$

Veamos gráficamente lo que estoy buscando

Ver el modulo collection, que es muy util.

Aquí veremos namedtupled

Ejercicio

1.- Ir a la documentación de collections y ver qué namedtupled

2.- Obtener la coordenada de x del primer elemento de points

3.- ¿Que hace np.ravel?

4.- ¿Para que hacemos el np.meshgrid?

5.- ¿Qué se está haciendo en:

 ````
 zs = np.array([error(mp, bp, points)for mp, bp in zip(np.ravel(M), np.ravel(B))]) 
 ````

Vamos ahora a graficar la recta, que mejor ajusta, entre los puntos.

Marco teórico teórico:

Lo que hemos hecho arriba tenia como objetivo repazar algunos elementos de Python y de regresión.

En la realidad, observo

Los datos que observo de la variable dependiente, $Y$, se desvían de la relación lineal $\beta_0 + \beta_1 \times X$: por cuestiones inobservables, $U$

$$ Y = \beta_0 + \beta_1 \times X + U $$

Dado esto, lo que me interesa es predecir $Y$ lo mejor posible:

$$ Y = \underbrace{\beta_0 + \beta_1X}_{\hat{Y} = \hat{\beta_0} + \hat{\beta_1} \times X } + U $$

Necesito entonces un algoritmo para buscar los estimadores de lo parámetros $ \hat{\beta_0},\hat{\beta_1}$.

Método del descent gradient para resolver regresion lineal

SegmentLocal

Ejercicio:

Modifique el algoritmo de gradient descent para que itere siempre que la tolerancia, definida como la variación del ECM entre una iteración y otra, sea mayor que un nivel.

Analice cómo depende el resulado de la tolerancia que usted asigna

Asigne dos tolerancias:

1.- 0.5

2.- 0.01