Está en la página 1de 8

1/10/23, 20:07 Copia de last_1 - Colaboratory

Sistema de agricultura inteligente


Alexander Martin Valdivia Anca

1. Introducción

El proyecto se centra en el desarrollo de un sistema de agricultura inteligente que tiene como objetivo predecir el rendimiento del cultivo de
maíz utilizando parámetros del cultivo y parámetros meteorológicos.

La optimización de la producción agrícola y el uso eficiente de los recursos a través del desarrollo de un Sistema de Agricultura Inteligente es
un tema importante en el campo agrícola. Este sistema se basa en la aplicación de técnicas avanzadas de aprendizaje automático para
predecir y controlar variables importantes en la agricultura, como el rendimiento de los cultivos, las necesidades de riego, la fertilización y otros
factores determinantes. El problema propuesto se centra en construir un modelo de predicción de rendimiento utilizando un conjunto de datos
para predecir de manera precisa y confiable las condiciones óptimas para la producción agrícola. Por ello, se nos habilitó una base de datos
para poder realizar el estudio de los datos recopilados del año 2000 al 2016 para predecir el rendimiento del cultivo de maíz tomando en
consideración parámetros del cultivo y parámetros meteorológicos.

2. Objetivos
Entregable: archivo de modelo entrenado
Condición de éxito: Promedio.
La interpretación del modelo será útil.
Sin requisito de latencia.
Utilizar métrica de rendimiento KPI.
Predecir rendimiento de cultivo mediante algoritmos en lenguaje Phyton.

4. Análisis de datos

Iniciando determinamos que es un problema de aprendizaje supervisado debido a que se tienen muestras y sus etiquetas, además se buscar
encontrar la respuesta correcta. Y luego deterinamos que es de regresión debido a que queremos pide en el enunciado predecir el rendimiento
del cultivo de maíz mediante variables continuas como lo son el año, temperatura, precipitación, etc.

4.1 Librerías
En un inicio para el funcionamiento de nuestro algoritmo importaremos algunas librerias importantes que nos serviran en toda la tarea.

NumPy: es una biblioteca fundamental para la programación numérica en Python.Proporciona estructuras de datos eficientes para
trabajar con arreglos multidimensionales (arrays) y funciones para realizar operaciones matemáticas en estos arrays.Es ampliamente
utilizado en la ciencia de datos y la computación científica debido a su eficiencia y facilidad de uso.

Pandas: es una biblioteca de Python que se utiliza para el análisis y manipulación de datos. Proporciona estructuras de datos flexibles,
como DataFrames, que permiten almacenar y manipular datos tabulares de manera eficiente. Es muy utilizado en la limpieza, exploración
y transformación de datos antes de realizar análisis más avanzados.

Seaborn y Matplotlib: son bibliotecas de visualización de datos en Python. Matplotlib es una biblioteca de trazado de bajo nivel que
ofrece un alto grado de personalización en la creación de gráficos y visualizaciones. Seaborn es una capa de alto nivel sobre Matplotlib
que simplifica la creación de gráficos estadísticos atractivos y está diseñada específicamente para trabajar con DataFrames de pandas.
Ambas bibliotecas son fundamentales para la creación de visualizaciones de datos efectivas.

Warnings: La biblioteca warnings es parte de la biblioteca estándar de Python y se utiliza para controlar el manejo de advertencias en el
código. Permite configurar cómo se manejarán y mostrarán las advertencias en tiempo de ejecución, lo que es útil para depurar y mejorar
la calidad del código. scikit-learn (sklearn):

Scikit-learn: es una biblioteca de aprendizaje automático de código abierto que proporciona herramientas para realizar tareas de minería
de datos y aprendizaje automático. Ofrece una amplia gama de algoritmos de clasificación, regresión, agrupación y más. También incluye
herramientas para la evaluación de modelos, preprocesamiento de datos y selección de características.

Estas bibliotecas son esenciales para cualquier persona que trabaje en análisis de datos, ciencia de datos o aprendizaje automático en Python,
ya que simplifican muchas tareas complejas y ofrecen una amplia gama de funcionalidades para trabajar con datos y visualizar resultados.

[ ] ↳ 2 celdas ocultas

4.2 Extraer el archivo desde drive

https://colab.research.google.com/drive/1qwcUc1HMR_k6tUef803Px-9sfRUM5Hnx?usp=chrome_ntp#scrollTo=rd4Lma9jrkhu&printMode=true 1/8
1/10/23, 20:07 Copia de last_1 - Colaboratory
Para extraer el archivo se recomienda direccipnar al drive personal para que sea más fácil usar el colab. En caso de no hacerlo, cada vez que
habra el colab tendría que agregar el archivo de datos a los archivos, o cual se hace tedioso si es que trabajas en diferentes computadoras o
trabajas en diferentes días el algortimo.
[ ] ↳ 2 celdas ocultas

4.3 Características de Datos


Iniciamos viendo el tamaño que es de (30110,10) es decir 30110 filas y 10 columnas. De ello inferimos que hay 10 características y
30110 observaciones

De las 10 columnas podemos ver que son:

1. 'year': año en que se realizó la siembra.


2. 'yield': rendimiento de un cultivo en bushel/acre.
3. 'harvested_area':área cosechada en acres Características del clima.
4. 'temp_max': temperatura máxima en °C.
5. 'temp_min':temperatura mínima en °C.
6. 'temp_prom':temperatura promedio en °C.
7. 'vpd_max': déficit de vapor de presión máxima en mBar.
8. 'vpd_min':déficit de vapor de presión mínima en mBar.
9. 'vpd_prom':déficit de vapor de presión promedio en mBar.
10. 'precip': precipitación en pulgadas.

Podemos apreciar que las 10 caracterísicas son numéricas y no hay ninguna categórica. Esto también lo confirmamos usando el
"df.dtypes[df.dtypes=='object']" que nos muestra cuantas columnas tipo objeto hay.

Gracias al comando describe() podemos darle una vista de parametros importantes de nuestros datos como valores mínimos, máximos,
promedio, media, etc.

Podemos apreciar que hay datos desde el año 2000 hasta el 2016. Por ende datos más allá del 2016 no cuentan y antes del 2000
tampoco.
Promedio por año se produce 128 bushel acre de cultivo de maiz.
Máxima area de cosechada es de 394000 acres.
Temperatura maxima de 38.38 °C y menor en -2.45°C
Precipitación maxima de 54.88 pulgadas y mínima de 0.002 pulgadas.
Valor minimo de producción 0 lo cual es raro y analizaremos luego.

Analizando ello podemos llegar a unas conclusiones a simple vista, sin embargo seguiremos con el análisis para reducir datos erróneos.

[ ] ↳ 6 celdas ocultas

4.4 Distribuciones de características numéricas


A continuación mostraremos los histogramas de las características numéricas. recordando antes que un histograma nos muestra la cantidad
de veces que se repite una variable en un punto.

1. 'year': Este histograma nos muestra que más datos hay es entre 2000 y2003.

2. 'yield': Este histograma nos muestra que el rendimiento de cultivo más común con más de 7000 cultivos de maíz es entre 130 y 160
bushel/acre. El máximo está entre 200 y 250 bushel/acre y muy pocos producen esta cantidad.

3. 'harvested_area':Este histograma nos muestra que el área cosechada en acres en más de 17500 cultivos de maiz es entre 0 y 50000
acres. muy pocos tienen más de 200000 acres.

4. 'temp_max': Este histograma nos muestra que en más de 8000 cultivos de maíz la temperatura es entre 20 y 25 grados centígrados.

5. 'temp_min':Este histograma nos muestra que en más de 7000 cultivos de maíz la temperatura es entre 7 y 13 grados centígrados.

https://colab.research.google.com/drive/1qwcUc1HMR_k6tUef803Px-9sfRUM5Hnx?usp=chrome_ntp#scrollTo=rd4Lma9jrkhu&printMode=true 2/8
1/10/23, 20:07 Copia de last_1 - Colaboratory

6. 'temp_prom':Este histograma nos muestra que en más de 7000 cultivos de maíz la temperatura promedio es entre 15 y 20 grados
centígrados.

7. 'vpd_max': Este histograma nos muestra que en mas de 14000 cultivos de maíz el déficit de vapor de presión máxima se concentra en 12
a 17 en mBar.

8. 'vpd_min':Este histograma nos muestra que en mas de 20000 cultivos de maíz el déficit de vapor de presión mínima se concentra en 0 a
2.5 en mBar.

9. 'vpd_prom':Este histograma nos muestra que en mas de 14000 cultivos de maíz el déficit de vapor de presión máxima se concentra en 12
a 17 en mBar.

10. 'precip': Este histograma nos muestra que en más de 12000 cultivos de maíz la precipitación va aproximadamente entre 50 y 120
pulgadas.

[ ] ↳ 4 celdas ocultas

4.5 Limpieza de Datos


Utilizamos un diagrama de caja para ver la relación entre dos variables. Escogimos year y yield. De ello deducimos que el año 2014 en
promedio fue mayor la produccion de maiz que en otros años. También que en varios años hay datos que salen de las cajas y están en 0 lo que
significa que no hubo producción o el dato está en nan.

Comparamos también yield con los demás características y encontramos algunos Nan con "df.groupby('property_type').mean()"

https://colab.research.google.com/drive/1qwcUc1HMR_k6tUef803Px-9sfRUM5Hnx?usp=chrome_ntp#scrollTo=rd4Lma9jrkhu&printMode=true 3/8
1/10/23, 20:07 Copia de last_1 - Colaboratory

Por ello decidimo eliminar los Nan con el método dropna() se utiliza en pandas para eliminar filas o columnas que contienen valores NaN
(valores nulos). De ello redujimos el número de (30110, 10) a (29681, 10). Como podemos ver solo hubo efecto en filas, se redujeron en
429.

Iniciamos limpiando duplicados y las dimensiones no cambiaron por lo que no existen duplicados.

Eliminación de valores atípicos.

Eliminamos duplicados, sin embargo en esta vase de datos no hubo

[ ] ↳ 5 celdas ocultas

4.6 Correlación
Valor entre -1 y 1 que representa qué tan cerca se mueven al unísono los valores de dos entidades separada. La correlación positiva significa
que a medida que aumenta una característica, aumenta la otra; p.ej. la edad y la altura de un niño. La correlación negativa significa que a
medida que una característica aumenta, la otra disminuye; p.ej. horas dedicadas al estudio y número de fiestas a las que asistieron. Las
correlaciones cercanas a -1 o 1 indican una relación fuerte. Los más cercanos a 0 indican una relación débil. 0 indica que no hay relación.

De ello podemos observar en la imagen que:

Existe una correlación fuerte positiva entre:

vsp_max y vdp prom. temp_max


vdp_max. temp_min y temp_max.
temp_min y temp_prom.
Existe una correlación fuerte negativa entre:

https://colab.research.google.com/drive/1qwcUc1HMR_k6tUef803Px-9sfRUM5Hnx?usp=chrome_ntp#scrollTo=rd4Lma9jrkhu&printMode=true 4/8
1/10/23, 20:07 Copia de last_1 - Colaboratory
vdp_max con precip. Al igual que
vdp_prom con precip.
Existe una correlación debil entre:

year y temp_prom
year y precip.

Definitivamente se puede apreciar en la imagen de mejor manera. Sin embargo respecto a nuestra variable yield podemos ver que
harvested_area estan fuertemente relacionadas. correlacion negativa con temp_max y temp_prom.

Eliminamos temp_prom y vpd_prom debido a que su correlación es debil con nuestra variable obejtivo yield.

[ ] ↳ 24 celdas ocultas

4.7 Etiquetar datos categóricos faltantes


No puede simplemente ignorar los valores faltantes en su conjunto de datos. Debe manejarlos de alguna manera por la razón muy práctica de
que los algoritmos de Scikit-Learn no aceptan valores perdidos. Por último guardamos los datos en nuestro drive.

[ ] ↳ 11 celdas ocultas

4.8 Variables de interacción


Para que el maíz creca debe ser mayor a 6 grados por lo que eliminaremos datos con valores menores a 6°C.
Eliminaremos valores de precipitacion mayores en 400 debido a que son muy raras.

Nos quedaremos entonces de 30110 restando los Nan a 26857 y sin las variables quitadas en esta sección en 27023 datos.

Utilizamos describe para volver a analizar los datos.

https://colab.research.google.com/drive/1qwcUc1HMR_k6tUef803Px-9sfRUM5Hnx?usp=chrome_ntp#scrollTo=rd4Lma9jrkhu&printMode=true 5/8
1/10/23, 20:07 Copia de last_1 - Colaboratory

[ ] ↳ 7 celdas ocultas

5. Modelo Machine Learning


5.1 Preparación de datos
Separamos los datos, guardamos en y los valores objetivo (variable a predecir) y en X las características de nuestros datos.

5.2 Estandarización de datos


El código que utilizamos ahora es la función train_test_split de la biblioteca scikit-learn (sklearn) para dividir los datos en conjuntos de
entrenamiento (train) y prueba (test) de acuerdo con lo estudiado la proporción especificada recomendable es (en este caso, 80% para
entrenamiento y 20% para prueba) y un valor de semilla aleatoria (random_state) para asegurar reproducibilidad.

Esta funcion nos devuelve 4 conjuntos de datos:

X_tr: Conjunto de características de entrenamiento.


X_tst: Conjunto de características de prueba.
y_tr: Conjunto de etiquetas de entrenamiento.
y_tst: Conjunto de etiquetas de prueba.

Luego centramos la media en cero y escalado unitario. y guardamos estos datos porque usamos la misma media y desviación estándar en el
conjunto de prueba.

Para realizar una expansión polinómica de las características (variables independientes) en los conjuntos de entrenamiento y prueba. La
expansión polinómica es útil cuando deseas ajustar un modelo de regresión polinómica, que es una extensión de la regresión lineal. Por ello
importamos

LinearRegression: Esta clase se utiliza para construir un modelo de regresión lineal.


PolynomialFeatures: Esta clase se utiliza para realizar la expansión polinómica de las características.

Luego procedemos a entrenar el modelo utilizando LinearRegression(). Esto genera un objeto model que representa el modelo de regresión
lineal.

Se utiliza el método fit para entrenar el modelo. Por último, utilizamos métricas comunes de evaluación de modelos de regresión para evaluar
el rendimiento de un modelo en los datos de entrenamiento:

Mean_squared_error (mse): Calcula el error cuadrático medio, que mide el promedio de los errores al cuadrado entre las predicciones del
modelo y las etiquetas reales. Cuanto menor sea el valor de MSE, mejor será el ajuste del modelo.

R2_score (rs): Calcula el coeficiente de determinación R-squared, que proporciona una medida de cuánta varianza en la variable objetivo
puede explicar el modelo. Un valor cercano a 1 indica un buen ajuste, mientras que un valor cercano a 0 indica que el modelo no explica
bien la variabilidad.

Mean_absolute_error (mae): Calcula el error absoluto medio, que mide el promedio de las diferencias absolutas entre las predicciones del
modelo y las etiquetas reales. Al igual que el MSE, un valor menor de MAE indica un mejor ajuste del modelo.

Estas métricas son útiles para evaluar el rendimiento del modelo en los datos de entrenamiento y pueden ayudarte a determinar qué tan bien
se ajusta el modelo a esos datos.

5.3 Proceso de resultados


Utilizamos en un inicio grado 2 y luego fuimos subiendo:

https://colab.research.google.com/drive/1qwcUc1HMR_k6tUef803Px-9sfRUM5Hnx?usp=chrome_ntp#scrollTo=rd4Lma9jrkhu&printMode=true 6/8
1/10/23, 20:07 Copia de last_1 - Colaboratory

Grado 5:

Al ver que no teniamos buenas respuestas intentamos usar SVR (Support Vector Regression) debido a que SVR es una buena elección cuando
tienes datos con relaciones no lineales complejas y ruido, y no estás preocupado por la interpretación de coeficientes. Por otro lado, la
regresión lineal con características polinómicas es más apropiada cuando sospechas relaciones no lineales más simples y deseas
coeficientes interpretables.

Con SVR mejoramos el modelo en 10% aproximadamente

También se intentó usar validación cruzada y lo resultados no fueron favorables. A continuación se muestra el grado que se usó y los
resultados de ello:

R^2 score de modelo de entrenamiento y test con linerar regression usando con validación cruzada:

[ ] ↳ 16 celdas ocultas

https://colab.research.google.com/drive/1qwcUc1HMR_k6tUef803Px-9sfRUM5Hnx?usp=chrome_ntp#scrollTo=rd4Lma9jrkhu&printMode=true 7/8
1/10/23, 20:07 Copia de last_1 - Colaboratory

6. Resultados
Test Results (Resultados de Prueba):

1. Root Mean Squared Error (RMSE): Este valor es aproximadamente 25.76 en el conjunto de prueba. Indica que el modelo tiene un error
promedio de alrededor de 25.76 en las predicciones en el conjunto de prueba. Es ligeramente mayor que el RMSE en el conjunto de
entrenamiento, lo que sugiere que el modelo podría estar teniendo un rendimiento ligeramente peor en datos no vistos.

2. R-squared (R-cuadrado): Este valor es aproximadamente 0.546 en el conjunto de prueba. Indica que el modelo es capaz de explicar
aproximadamente el 54.6% de la variabilidad en el rendimiento del cultivo de maíz en el conjunto de prueba. Es ligeramente menor que el
R-cuadrado en el conjunto de entrenamiento, lo que sugiere que el modelo no se generaliza tan bien a datos nuevos.

3. Mean Absolute Error (MAE): Este valor es aproximadamente 19.12 en el conjunto de prueba. Indica que el modelo tiene un error absoluto
promedio de alrededor de 19.12 en las predicciones en el conjunto de prueba.

7. Conclusiones
El modelo parece funcionar razonablemente bien en el conjunto de entrenamiento, pero puede haber una ligera degradación en su
rendimiento cuando se aplica a datos de prueba no vistos. Se debe tener en cuenta que estos resultados deben interpretarse en el
contexto del problema específico y las metas de rendimiento establecidas para el cultivo de maíz. También es posible que se puedan
mejorar los resultados ajustando o refinando el modelo.
El uso de Support Vector Regression (SVR) en problemas de regresión puede ser beneficioso en ciertas situaciones debido a varias
ventajas que ofrece este enfoque
SVR es especialmente útil cuando los datos no siguen una relación lineal simple entre las variables predictoras y la variable objetivo.
Mientras que los modelos de regresión lineal asumen relaciones lineales, SVR puede manejar relaciones no lineales mediante el uso de
funciones de kernel que transforman los datos en un espacio de características de mayor dimensión. Esto permite que SVR capture
relaciones más complejas.
A través de la selección del kernel y la configuración de parámetros, puedes ajustar la flexibilidad del modelo SVR. Puedes elegir entre
diferentes tipos de kernel, como lineal, polinómico o radial (RBF), según la naturaleza de tus datos y las características de tu problema.
SVR incorpora la regularización en el proceso de ajuste del modelo. Esto ayuda a prevenir el sobreajuste, lo que significa que SVR tiende a
generalizar bien a nuevos datos, lo que es importante en problemas de regresión.

https://colab.research.google.com/drive/1qwcUc1HMR_k6tUef803Px-9sfRUM5Hnx?usp=chrome_ntp#scrollTo=rd4Lma9jrkhu&printMode=true 8/8

También podría gustarte