{"id":3400,"date":"2023-06-29T12:07:34","date_gmt":"2023-06-29T12:07:34","guid":{"rendered":"https:\/\/neuraldesigner.com\/blog\/madrid-air-forecasting\/"},"modified":"2025-09-15T16:03:21","modified_gmt":"2025-09-15T14:03:21","slug":"madrid-air-forecasting","status":"publish","type":"blog","link":"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/","title":{"rendered":"Forecast air pollution in a city using machine learning"},"content":{"rendered":"<p>Air pollution is one of the significant problems the world faces.<\/p>\n<p>Having a way to monitor these levels, allowing for informed decisions, can be crucial for public administrations.<\/p>\n<p>We want to predict the levels of atmospheric pollutants for the following week in Madrid.<\/p>\n<p>We solve this example with <a href=\"https:\/\/www.neuraldesigner.com\/\">Neural Designer<\/a>. To follow it step by step, you can use the <a href=\"https:\/\/www.neuraldesigner.com\/free-trial\">free trial<\/a>.<\/p>\n<section>\n<h2>Contents<\/h2>\n<ol>\n<li><a href=\"#ApplicationType\">Application type<\/a>.<\/li>\n<li><a href=\"#DataSet\">Data set<\/a>.<\/li>\n<li><a href=\"#NeuralNetwork\">Neural network<\/a>.<\/li>\n<li><a href=\"#TrainingStrategy\">Training strategy<\/a>.<\/li>\n<li><a href=\"#ModelSelection\">Model selection<\/a>.<\/li>\n<li><a href=\"#TestingAnalysis\">Testing analysis<\/a>.<\/li>\n<li><a href=\"#ModelDeployment\">Model deployment<\/a>.<\/li>\n<\/ol>\n<\/section>\n<section id=\"ApplicationType\">\n<h2>1. Application type<\/h2>\n<p>This is a <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-networks-applications#Forecasting\">forecasting<\/a> project since the variables to be predicted are the values of five pollutants for the next week.<\/p>\n<p>The goal here is to obtain an accurate prediction for each of them.<\/p>\n<\/section>\n<section id=\"DataSet\">\n<h2>2. Data set<\/h2>\n<p>The file <a href=\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/10\/madrid-forecasting.csv\">madrid-forecasting.csv<\/a> contains 2,959 samples, each with 15 inputs.<\/p>\n<h3>Variables<\/h3>\n<p>We transform the dataset into a time series with lags and steps ahead. The output variables are 35, one for each pollutant, for 7 days of the week. The following list summarizes the variables&#8217; information:<\/p>\n<p>Regarding time attributes:<\/p>\n<ul>\n<li><b>day<\/b><\/li>\n<li><b>month<\/b><\/li>\n<li><b>weekday<\/b><\/li>\n<\/ul>\n<p>As far as contamination attributes, all values are presented using the <a href=\"https:\/\/www.airnow.gov\/aqi\/aqi-basics\/\">Air Quality Index<\/a>:<\/p>\n<ul>\n<li><b>PM2.5<\/b>: value of particulate matter less than 2.5 microns in diameter.<\/li>\n<li><b>PM10<\/b>: value of particulate matter less than 10 microns in diameter.<\/li>\n<li><b>O3<\/b>: tropospheric ozone value (at ground level).<\/li>\n<li><b>NO2<\/b>: nitrogen dioxide value.<\/li>\n<li><b>SO2<\/b>: sulfur dioxide value.<\/li>\n<\/ul>\n<p>Lastly, regarding meteorological attributes:<\/p>\n<ul>\n<li><b>precipitations<\/b>: amount of rainfall in mm.<\/li>\n<li><b>tavg<\/b>: average daily temperature.<\/li>\n<li><b>tmax<\/b>: maximun daily temperature<\/li>\n<li><b>tmin<\/b>: minimum daily temperature<\/li>\n<li><b>pressure<\/b>: atmospheric pressure in hPa.<\/li>\n<li><b>windspeed<\/b>: average wind speed in km\/h.<\/li>\n<li><b>humidity<\/b>: relative humidity in percentage.<\/li>\n<\/ul>\n<p>The target variables represent the value of each pollutant for one day of the week, resulting in a total of thirty-five target variables.<\/p>\n<h3>Instances<\/h3>\n<p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#Instances\">instances<\/a> are split at random into training (60%), selection (20%), and testing (20%) subsets.<\/p>\n<h3>Statistics<\/h3>\n<p>Once the data set has been set, we are ready to perform a few related analytics. With that, we verify the provided information and ensure that the data is of high quality.<\/p>\n<p>We can calculate the data <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#Statistics\">statistics<\/a> and create a table that displays the minimums, maximums, means, and standard deviations of all variables in the dataset. The following table depicts the values.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/data-stats-madrid.png\" \/><\/p>\n<p>&nbsp;<\/p>\n<h3>Input-target correlations<\/h3>\n<p>Additionally, we can identify the existing <span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\"><a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#InputsTargetsCorrelations\" target=\"_blank\" rel=\"noopener\">correlations between inputs and targets<\/a> for each variable, thereby gaining<\/span> insight into the importance of different factors on atmospheric pollutants.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/PM25-correlations.png\" \/><\/p>\n<p>We can appreciate the significant influence that one contaminant has on the others (if the levels of one increase, typically they all increase).<\/p>\n<p>Additionally, the impact of meteorological conditions on air quality is evident. For example, PM2.5 levels decrease with higher wind speed, due to the dispersion of particles that this causes.<\/p>\n<\/section>\n<section id=\"NeuralNetwork\">\n<h2>3. Neural network<\/h2>\n<p>The second step is to set a <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network\">neural network<\/a> to represent the forecasting function. For this class of applications, the neural network is composed of:<\/p>\n<ul>\n<li>Scaling layer.<\/li>\n<li>Perceptron layers.<\/li>\n<li>Unscaling layer.<\/li>\n<\/ul>\n<p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network#ScalingLayer\">scaling layer<\/a> uses the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network#MinimumMaximumScalingMethod\">minimum and maximum scaling method<\/a>.<\/p>\n<p>The number of <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network#PerceptronLayers\">perceptron layers<\/a> is 2:<\/p>\n<ul>\n<li>The first perceptron layer has 22 inputs and 10 neurons.<\/li>\n<li>The second perceptron layer has 10 inputs and 35 neurons (the number of target variables).<\/li>\n<\/ul>\n<p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network#ProbabilisticLayer\">perceptron layer<\/a> uses the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/neural-network#HyperbolicTangentActivationFunction\">hyperbolic tangent activation function<\/a>.<\/p>\n<p>In this graphical representation, we can see the architecture of the neural network.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/madrid-neural-network.png\" \/><\/p>\n<\/section>\n<section id=\"TrainingStrategy\">\n<h2>4. Training strategy<\/h2>\n<p>The procedure used to carry out the learning process is referred to as a <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy\">training strategy<\/a>. The training strategy is applied to the neural network to obtain the best possible performance.<\/p>\n<p>The type of training is determined by how the parameters in the neural network are adjusted.<\/p>\n<h3>Loss index<\/h3>\n<p>We set the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#MinkowskiError\">Minkowski error<\/a> with <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#L1Regularization\">L1 regularization<\/a> as the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#LossIndex\">loss index<\/a>.<\/p>\n<h3>Optimization algorithm<\/h3>\n<p>On the other hand, we use the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#QuasiNewtonMethod\">quasi-Newton method<\/a> as the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/training-strategy#OptimizationAlgorithm\">optimization algorithm<\/a>.<\/p>\n<h3>Training<\/h3>\n<p>The following chart illustrates how the training and selection errors decrease with the epochs of the quasi-Newton method during the training process.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/training-madrid.png\" \/><\/p>\n<p>As we can see, both curves&#8217; behavior is similar throughout the iterations, which means that no overfitting has occurred.<\/p>\n<article class=\"text-token-text-primary w-full focus:outline-none scroll-mt-[calc(var(--header-height)+min(200px,max(70px,20svh)))]\" dir=\"auto\" tabindex=\"-1\" data-turn-id=\"request-68c14edc-00d8-832b-af79-36da58cd2575-1\" data-testid=\"conversation-turn-272\" data-scroll-anchor=\"true\" data-turn=\"assistant\">\n<div class=\"text-base my-auto mx-auto pb-10 [--thread-content-margin:--spacing(4)] thread-sm:[--thread-content-margin:--spacing(6)] thread-lg:[--thread-content-margin:--spacing(16)] px-(--thread-content-margin)\">\n<div class=\"[--thread-content-max-width:40rem] thread-sm:[--thread-content-max-width:40rem] thread-lg:[--thread-content-max-width:48rem] mx-auto max-w-(--thread-content-max-width) flex-1 group\/turn-messages focus-visible:outline-hidden relative flex w-full min-w-0 flex-col agent-turn\" tabindex=\"-1\">\n<div class=\"flex max-w-full flex-col grow\">\n<div class=\"min-h-8 text-message relative flex w-full flex-col items-end gap-2 text-start break-words whitespace-normal [.text-message+&amp;]:mt-5\" dir=\"auto\" data-message-author-role=\"assistant\" data-message-id=\"378614bb-b79b-40c3-bcb9-b044bef2f654\" data-message-model-slug=\"gpt-5\">\n<div class=\"flex w-full flex-col gap-1 empty:hidden first:pt-[3px]\">\n<div class=\"markdown prose dark:prose-invert w-full break-words light markdown-new-styling\">\n<p data-start=\"0\" data-end=\"71\" data-is-last-node=\"\" data-is-only-node=\"\">The final errors are 0.598 ME for training and 0.657 ME for validation.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/article>\n<p>That indicates that the neural network has good generalization capabilities.<\/p>\n<\/section>\n<section id=\"ModelSelection\">\n<h2>5. Model selection<\/h2>\n<p>The objective of <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-selection\">model selection<\/a> is to find the network architecture with the best generalization properties, that is,\u00a0<span style=\"box-sizing: border-box; margin: 0px; padding: 0px;\">one that minimizes the error on the\u00a0<a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#SelectionInstances\" target=\"_blank\" rel=\"noopener\">selected instances<\/a> of the dataset<\/span>.<\/p>\n<p><a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-selection#OrderSelection\">Order selection<\/a> algorithms train several network architectures with different numbers of neurons and select the one with the smallest selection error.<\/p>\n<p>The <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-selection#IncrementalOrder\">incremental order<\/a> method starts with a small number of neurons and increases the complexity at each iteration.<\/p>\n<p>The following chart shows the training error (blue) and the selection error (orange) as a function of the number of neurons.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/growing-madrid.png\" \/><\/p>\n<\/section>\n<section id=\"TestingAnalysis\">\n<h2>6. Testing analysis<\/h2>\n<p>Once the model is trained, we perform a <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/testing-analysis\">testing analysis<\/a> to validate its prediction capacity. We use a subset of previously unused data, specifically the <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/data-set#TestingInstances\">testing instances<\/a>.<\/p>\n<p>To verify the results obtained in this example, the graphs below compare the predicted and actual values of contamination.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.neuraldesigner.com\/images\/PM25-results.png\" \/><\/p>\n<p>As shown in the graph above for PM2.5, the prediction aligns closely with the actual values in all cases, with only slight discrepancies for NO2. We can say that the results are satisfactory.<\/p>\n<\/section>\n<section id=\"ModelDeployment\">\n<h2>7. Model deployment<\/h2>\n<p>The neural network is now ready to predict the activity of new people in the so-called <a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-deployment\">model deployment<\/a> phase.<\/p>\n<p>The file <a href=\"https:\/\/www.neuraldesigner.com\/files\/python\/madrid-air-forecasting.py\" download=\"madrid-air-forecasting.py\">madrid-air-forecasting.py<\/a>\u00a0implements the\u00a0<a href=\"https:\/\/www.neuraldesigner.com\/learning\/tutorials\/model-deployment#MathematicalExpression\">mathematical expression<\/a>\u00a0of the neural network in Python. This piece of software can be embedded in any tool to make predictions on new data.<\/p>\n<p>We can integrate this model into a website and, using public data retrieved from APIs, obtain the weekly forecast.<\/p>\n<pre><a style=\"font-size: 15px; height: auto; width: auto;\" href=\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-simulator\">Weekly air pollution forecast for Madrid &gt;<\/a><\/pre>\n<\/section>\n<section>\n<h2>References<\/h2>\n<ul>\n<li>The data for this problem has been taken from the <a href=\"https:\/\/aqicn.org\/data-platform\/register\/\">Air Quality Historical Data Platform<\/a>.<\/li>\n<\/ul>\n<\/section>\n<section>\n<h2>Related posts<\/h2>\n<\/section>\n","protected":false},"author":18,"featured_media":0,"template":"","categories":[],"tags":[46],"class_list":["post-3400","blog","type-blog","status-publish","hentry","tag-environment"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Forecast air pollution in a city using machine learning<\/title>\n<meta name=\"description\" content=\"Use machine learning to build a predictive model for the air pollution in the city of Madrid.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Air contamination forecast for Madrid\" \/>\n<meta property=\"og:description\" content=\"Use Neural Designer to obtain a prediction of the air contamination values in Madrid.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/\" \/>\n<meta property=\"og:site_name\" content=\"Neural Designer\" \/>\n<meta property=\"article:modified_time\" content=\"2025-09-15T14:03:21+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:title\" content=\"Air contamination forecast for Madrid\" \/>\n<meta name=\"twitter:description\" content=\"Use Neural Designer to obtain a prediction of the air contamination values in Madrid.\" \/>\n<meta name=\"twitter:site\" content=\"@NeuralDesigner\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/\",\"name\":\"Forecast air pollution in a city using machine learning\",\"isPartOf\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.neuraldesigner.com\/images\/data-stats-madrid.png\",\"datePublished\":\"2023-06-29T12:07:34+00:00\",\"dateModified\":\"2025-09-15T14:03:21+00:00\",\"description\":\"Use machine learning to build a predictive model for the air pollution in the city of Madrid.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/#primaryimage\",\"url\":\"https:\/\/www.neuraldesigner.com\/images\/data-stats-madrid.png\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/images\/data-stats-madrid.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.neuraldesigner.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Blog\",\"item\":\"https:\/\/www.neuraldesigner.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Forecast air pollution in a city using machine learning\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#website\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"name\":\"Neural Designer\",\"description\":\"Explanable AI Platform\",\"publisher\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.neuraldesigner.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#organization\",\"name\":\"Neural Designer\",\"url\":\"https:\/\/www.neuraldesigner.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"contentUrl\":\"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png\",\"width\":1024,\"height\":223,\"caption\":\"Neural Designer\"},\"image\":{\"@id\":\"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/NeuralDesigner\",\"https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Forecast air pollution in a city using machine learning","description":"Use machine learning to build a predictive model for the air pollution in the city of Madrid.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/","og_locale":"en_US","og_type":"article","og_title":"Air contamination forecast for Madrid","og_description":"Use Neural Designer to obtain a prediction of the air contamination values in Madrid.","og_url":"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/","og_site_name":"Neural Designer","article_modified_time":"2025-09-15T14:03:21+00:00","twitter_card":"summary_large_image","twitter_title":"Air contamination forecast for Madrid","twitter_description":"Use Neural Designer to obtain a prediction of the air contamination values in Madrid.","twitter_site":"@NeuralDesigner","twitter_misc":{"Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/","url":"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/","name":"Forecast air pollution in a city using machine learning","isPartOf":{"@id":"https:\/\/www.neuraldesigner.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/#primaryimage"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/#primaryimage"},"thumbnailUrl":"https:\/\/www.neuraldesigner.com\/images\/data-stats-madrid.png","datePublished":"2023-06-29T12:07:34+00:00","dateModified":"2025-09-15T14:03:21+00:00","description":"Use machine learning to build a predictive model for the air pollution in the city of Madrid.","breadcrumb":{"@id":"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/#primaryimage","url":"https:\/\/www.neuraldesigner.com\/images\/data-stats-madrid.png","contentUrl":"https:\/\/www.neuraldesigner.com\/images\/data-stats-madrid.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.neuraldesigner.com\/blog\/madrid-air-forecasting\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.neuraldesigner.com\/"},{"@type":"ListItem","position":2,"name":"Blog","item":"https:\/\/www.neuraldesigner.com\/blog\/"},{"@type":"ListItem","position":3,"name":"Forecast air pollution in a city using machine learning"}]},{"@type":"WebSite","@id":"https:\/\/www.neuraldesigner.com\/#website","url":"https:\/\/www.neuraldesigner.com\/","name":"Neural Designer","description":"Explanable AI Platform","publisher":{"@id":"https:\/\/www.neuraldesigner.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.neuraldesigner.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.neuraldesigner.com\/#organization","name":"Neural Designer","url":"https:\/\/www.neuraldesigner.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","contentUrl":"https:\/\/www.neuraldesigner.com\/wp-content\/uploads\/2023\/05\/logo-neural-1.png","width":1024,"height":223,"caption":"Neural Designer"},"image":{"@id":"https:\/\/www.neuraldesigner.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/NeuralDesigner","https:\/\/es.linkedin.com\/showcase\/neuraldesigner\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/blog\/3400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/blog"}],"about":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/types\/blog"}],"author":[{"embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/users\/18"}],"version-history":[{"count":0,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/blog\/3400\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/media?parent=3400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/categories?post=3400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.neuraldesigner.com\/api\/wp\/v2\/tags?post=3400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}