{"id":1142,"date":"2025-07-28T06:21:27","date_gmt":"2025-07-28T06:21:27","guid":{"rendered":"https:\/\/troyberry.dev\/?page_id=1142"},"modified":"2025-08-01T19:19:18","modified_gmt":"2025-08-01T19:19:18","slug":"demand-forecasting-platform-for-utilities","status":"publish","type":"page","link":"https:\/\/troyberry.dev\/index.php\/demand-forecasting-platform-for-utilities\/","title":{"rendered":"Demand Forecasting Platform for Utilities"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1142\" class=\"elementor elementor-1142\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5d731a7 e-flex e-con-boxed e-con e-parent\" data-id=\"5d731a7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-47060dc elementor-widget elementor-widget-ober-description\" data-id=\"47060dc\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"ober-description.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t<!-- Description -->\n        <div class=\"p-title scrolla-element-anim-1 scroll-animate\" data-animate=\"active\">\n      <span >\n        (IGS Energy via Snowflake)      <\/span>\n    <\/div>\n    \t\t\t\t<div class=\"text scrolla-element-anim-1 scroll-animate\" data-animate=\"active\">\n\t\t\t<div >\n\t\t\t\t<div><div><p><strong>Overview<\/strong><\/p><\/div><div><p>Kermit Troy Berry spearheaded the development of a Snowflake based demand forecasting and anomaly detection platform for IGS Energy, a major retail utilities provider. This platform unified hundreds of disparate forecasting models into a single Snowflake ML pipeline, dramatically simplifying operations. By leveraging five years of historical consumption data and advanced machine learning, the solution increased forecasting accuracy and provided early detection of underperforming solar assets, aligning with IGS Energy\u2019s mission of a sustainable, reliable energy future.<\/p><p>\u00a0<\/p><\/div><div><p><strong>Objective<\/strong><\/p><\/div><div><p>The objective was to improve the accuracy and efficiency of energy demand forecasts while reducing maintenance overhead and cost. IGS Energy needed to replace its legacy on premises forecasting processes with a scalable cloud solution that could forecast energy consumption more precisely and identify anomalies (like solar panel underperformance) in real time. The goal was a unified forecasting model that could handle all customer accounts, cutting complexity and cost without sacrificing accuracy, and an integrated anomaly detection system to enhance customer experience.<\/p><p>\u00a0<\/p><\/div><div><p><strong>Role and Responsibilities<\/strong><\/p><\/div><div><p>In his role as Senior Machine Learning Engineer (consulting via Snowflake), Kermit was responsible for end to end solution delivery:<\/p><\/div><ul><li>Architecting ML Pipelines: Designed and implemented Snowpark ML pipelines for time series forecasting, transitioning from many per customer models to one unified model.<\/li><li>Data Engineering and ELT: Automated data ingestion and transformation using Snowflake Streams and Tasks to continuously feed the latest consumption data into models.<\/li><li>Model Development: Trained and fine tuned forecasting models on 5+ years of energy consumption and weather data, improving the Mean Absolute Percentage Error (MAPE) by an estimated 22% (indicating significantly higher prediction accuracy).<\/li><li>Anomaly Detection: Developed an anomaly detection module to flag irregularities in solar generation output, utilizing SQL window functions and Python UDFs (User Defined Functions) within Snowflake to pinpoint solar panel performance issues.<\/li><li>Data Governance: Enforced strict data security and privacy measures. Implemented GDPR compliant role based access control (RBAC) and dynamic data masking to protect sensitive customer information in analytical views.<\/li><li>Visualization &amp; Stakeholder Enablement: Delivered interactive Streamlit dashboards for scenario analysis, allowing business stakeholders to simulate \u201cwhat if\u201d scenarios (e.g. demand spikes, weather events) and explore forecast outcomes via a user friendly interface.<\/li><\/ul><div><p>\u00a0<\/p><p><strong>Approach and Technology Stack<\/strong><\/p><\/div><div><p><strong>Architecture:<\/strong> Kermit\u2019s approach centered on Snowflake\u2019s Data Cloud as the unified data and compute platform. He migrated fragmented forecasting jobs (previously running in siloed environments) into Snowflake, harnessing Snowpark (Snowflake\u2019s Python API) to develop and deploy the models directly where the data resides. This consolidation eliminated data transfer overhead and ensured consistency. By moving from hundreds of per account models to a single multi account model, the training process became far more efficient, yielding a 75% reduction in model training costs.<\/p><\/div><div><p><strong>Data Pipeline:<\/strong> A robust ELT pipeline was built using Snowflake Streams and Tasks. Incoming usage data (e.g. smart meter readings, weather feeds) were continuously captured; Streams tracked new data in ingestion tables and Tasks orchestrated scheduled merges and transformations. This automation ensured the forecasting model was always training on up to date data without manual intervention.<\/p><\/div><div><p><strong>Time Series Modeling:<\/strong> The core forecasting model was a time series ML algorithm tailored for utility demand patterns. Training data spanned five years of hourly consumption across 1M+ customers, incorporating seasonality and weather features. By training one unified model on this rich dataset, the solution achieved high granularity forecasts while avoiding duplication of effort. Model experimentation was done in Snowpark using Python (pandas, statsmodels\/PyTorch), and the final model was deployed as a Snowflake UDAF (user defined aggregate function) for scalable inference across all accounts.<\/p><\/div><div><p><strong>Anomaly Detection:<\/strong> For solar panel performance monitoring, Kermit implemented a hybrid rule based and ML approach. Snowflake\u2019s SQL window functions were used to compute rolling generation baselines and detect deviations per panel. Detected anomalies were then fed into a Python UDF running a predictive model (considering weather and panel specs) to confirm true anomalies, minimizing false alerts. This approach replaced a manual, Excel based process and more precisely pinpointed underperforming installations, triggering proactive maintenance tickets.<\/p><\/div><div><p><strong>Tech Stack:<\/strong> The solution leveraged Snowflake Data Cloud (for data warehousing, Snowpark execution, Streams\/Tasks automation), Python (Snowpark API, data science libraries), SQL (analytics queries, window functions), and Streamlit (for web UI dashboards). Integration with Snowflake\u2019s security features (RBAC, masking policies) ensured compliance. All development and deployment were done in an agile manner, with iterative model improvements and dashboard feedback cycles.<\/p><\/div><div><p>\u00a0<\/p><p><strong>Challenges and Solutions<\/strong><\/p><\/div><div><p><strong>Scaling &amp; Complexity:<\/strong> The team faced the challenge of maintaining thousands of individual forecast models (one per customer) which was complex and costly. Kermit\u2019s solution was to refactor this approach into a single unified model, leveraging Snowflake\u2019s power to handle large scale data. This not only cut costs by 75% in model training infrastructure but also simplified maintenance. By proving that one model could achieve comparable or better accuracy (indeed improving accuracy by double digits), he gained stakeholder buy in for this innovative approach.<\/p><\/div><div><p><strong>Data Volume and Performance:<\/strong> Handling terabytes of time series data (billions of rows) for training and inference required careful optimization. Kermit addressed this by using Snowflake\u2019s elastic compute and partitioning strategies. Data was partitioned by region\/time, and the Snowpark pipeline was optimized to process partitions in parallel. The adoption of in database ML (via Snowpark UDFs) eliminated data movement, ensuring that even with massive data, training and forecasting ran in minutes rather than hours.<\/p><\/div><div><p><strong>Anomaly Detection Precision:<\/strong> Previously, anomaly detection had both false negatives (missed issues) and false positives (unnecessary field checks). Distinguishing true solar panel issues from normal variance was challenging. Kermit solved this by incorporating domain knowledge (e.g. expected output given weather conditions) into the model. The two stage detection (SQL baseline + ML verification) significantly improved precision. This increased customer satisfaction, as maintenance teams now trust that an alert warrants action, and it reduced wasted truck rolls to check false alarms.<\/p><\/div><div><p><strong>Data Privacy Compliance:<\/strong> Working with customer energy usage data in the cloud introduced compliance requirements (GDPR, state regulations). Kermit made data governance a design cornerstone: implementing column level encryption and masking for personal identifiers and using Snowflake\u2019s RBAC to strictly limit access on a need to know basis. He also established audit logging for data access. These measures ensured the project met all regulatory requirements and built customer trust, without hindering analytical capabilities.<\/p><\/div><div><p><strong>Stakeholder Adoption:<\/strong> Another challenge was making the advanced ML outputs usable for business decision makers (energy traders, planners). Kermit\u2019s introduction of Streamlit dashboards addressed this by presenting forecasts and anomaly flags in an intuitive web app format. He iterated with end users on the UI\/UX, adding features like scenario sliders (for testing assumptions) and alert summaries. This rapid feedback loop (enabled by Streamlit\u2019s quick deployment) led to enthusiastic adoption \u2014 business users could now interact with the model results directly rather than sifting through reports, thus using the insights more effectively.<\/p><\/div><div><p>\u00a0<\/p><p><strong>Results and Impact (with Metrics)<\/strong><\/p><\/div><div><p>The Demand Forecasting Platform delivered substantial business and technical benefits:<\/p><\/div><div><p><strong>Higher Forecast Accuracy:<\/strong> By deploying the unified model, IGS Energy achieved more accurate demand predictions, reflected in a 22% improvement in MAPE (forecast error) compared to the legacy approach. This accuracy boost means more optimal energy procurement decisions, reducing over or under buying of power.<\/p><\/div><div><p><strong>Cost Savings:<\/strong> Simplifying hundreds of models into one yielded significant cost reduction. Training resource costs dropped by roughly 75%, saving infrastructure spend and time. Additionally, maintenance effort was slashed, as one model is far easier to update than many.<\/p><\/div><div><p><strong>Faster Insights:<\/strong> Forecast generation that used to take ~30 minutes for all models now runs in just a few minutes on Snowflake. This speed enables near real time forecasting and the ability to run many simulations (e.g., scenario forecasting) on demand. Stakeholders can quickly get answers for \u201cwhat if\u201d questions (like extreme weather impact), improving strategic agility.<\/p><\/div><div><p><strong>Improved Anomaly Response:<\/strong> The new anomaly detection system is catching solar panel issues that were previously missed, while avoiding false alarms. IGS can now intervene promptly when a customer\u2019s solar array underperforms, minimizing downtime. This has led to an increase in customer satisfaction and trust \u2013 customers see that their green energy investment is actively monitored and kept optimal. Internally, the operations team saved labor by not having to do manual comparisons; they can allocate those resources to more value added tasks.<\/p><\/div><div><p><strong>Regulatory Compliance and Security:<\/strong> The platform operated fully within GDPR guidelines, with zero incidents of data privacy breach. By baking compliance into the design, Kermit ensured IGS Energy avoided potential fines or reputational damage, while safely leveraging customer data for ML. This also positioned the company well for upcoming privacy requirements, future proofing the solution.<\/p><\/div><div><p><strong>Business Impact:<\/strong> The forecasting improvements and anomaly management collectively support IGS\u2019s business goals. More accurate forecasts translate to cost savings in energy purchasing and a competitive pricing advantage. Better anomaly detection protects revenue (as solar customers remain satisfied and continue their service). Moreover, the intuitive dashboards bridged the gap between data science and business teams, accelerating data driven decision making across the organization. This project has been highlighted in Snowflake\u2019s customer story library as a model for leveraging AI in the utility sector.<\/p><p>\u00a0<\/p><\/div><div><p><strong>Lessons Learned<\/strong><\/p><\/div><div><p>This case study offered rich learnings for Kermit and the team:<\/p><\/div><div><p><strong>Unification Over Fragmentation:<\/strong> Consolidating many small models into a single robust model can greatly reduce complexity and cost, provided that data volume and diversity are handled carefully. The success here underlined that a well designed unified model can perform as well as many specialized ones, challenging the assumption that more models always mean better accuracy.<\/p><\/div><div><p><strong>Embed ML in the Data Ecosystem:<\/strong> Running ML directly within the data warehouse (in database ML) proved to be a game changer. It eliminated engineering friction and ensured models were always close to fresh data. The team learned the value of choosing tools that minimize data movement and leverage existing platforms an approach that sped up development and simplified governance.<\/p><\/div><div><p><strong>Importance of Domain Context:<\/strong> Incorporating domain specific factors (like weather patterns for solar output) significantly improved ML outcomes. The lesson was that pure algorithms aren\u2019t enough for complex real world problems; blending domain knowledge with ML techniques yields more practical and credible results, especially for anomaly detection in niche areas.<\/p><\/div><div><p><strong>Data Governance is Non Negotiable:<\/strong> Kermit\u2019s experience reinforced that building in security\/privacy from day one is far easier than retrofitting it later. The project\u2019s smooth compliance audit and zero security incidents underscored how proactive data governance (RBAC, masking, audit trails) not only avoids problems but can even accelerate adoption (stakeholders were more comfortable using the system knowing controls were in place).<\/p><\/div><div><p><strong>User Centric Delivery:<\/strong> Finally, the success of the Streamlit apps highlighted the importance of presenting technical work in a user friendly way. By engaging end users early and often, and iterating on visualizations and interface, the team ensured the sophisticated backend actually translated into actionable insight on the front end. In essence, a lesson learned is that the effectiveness of an ML project is not just measured by model metrics, but also by how well its outputs drive decisions and value for the business.<\/p><p>\u00a0<\/p><\/div><div><p><strong>Visual Summary<\/strong><\/p><\/div><div><p>To communicate this project, the following visuals are suggested:<\/p><\/div><div><p><strong>Architecture Diagram:<\/strong> A schematic showing the end to end pipeline: data sources (smart meters, weather APIs, solar sensors) flowing into Snowflake, the Snowpark ML pipeline performing forecasting, and the output streaming into dashboards and alerts. This diagram would highlight components like Snowflake Streams\/Tasks (for ELT), the unified forecasting model, and the anomaly detection loop, illustrating how data and results move through the system.<\/p><\/div><div><p><strong>Forecast vs Actual Chart:<\/strong> A time series line graph depicting predicted vs actual energy demand over a sample period, demonstrating the improved accuracy. An annotation can highlight where the new model\u2019s prediction closely tracks actual usage (as opposed to the old method\u2019s wider error margin). This could also include markers where anomalies were detected (e.g., a dip in solar output that the model caught).<\/p><\/div><div><p><strong>Streamlit Dashboard Snapshot:<\/strong> A screenshot of the interactive dashboard used by business stakeholders. For example, a view of the scenario analysis interface with sliders (temperature, consumption growth, etc.) and resulting forecast changes, or a dashboard page listing sites with solar array health status. This visual emphasizes how the complex analytics were made accessible and actionable for decision makers.<\/p><\/div><\/div>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t\t<a href=\"https:\/\/www.snowflake.com\/en\/customers\/all-customers\/case-study\/igs-energy\/\" class=\"btn scrolla-element-anim-1 scroll-animate\" data-animate=\"active\">\n\t\t\tView Work\t\t<\/a>\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-d81d9e2 e-flex e-con-boxed e-con e-parent\" data-id=\"d81d9e2\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-818704a e-con-full e-flex e-con e-child\" data-id=\"818704a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d1d0bcb elementor-widget elementor-widget-html\" data-id=\"d1d0bcb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\r\n            <svg viewBox=\"0 0 128 128\">\r\n            <g fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path fill=\"#386f9f\" d=\"M51.834 23.017c3.756 0 7.512.058 11.263-.04.995-.026 2.78.797 2.7-1.271-.061-1.683-1.622-1.074-2.568-1.089-4.237-.067-8.488-.228-12.708.037-3.003.187-3.888-.953-3.511-3.707.13-.95.005-1.934.025-2.902.132-6.446 1.69-8.64 7.942-10.23 6.888-1.75 13.937-1.692 20.806-.184 6.175 1.356 8.74 6.16 8.428 10.604-.38 5.423-.086 10.893-.091 16.343-.009 6.853-3.55 10.49-10.459 10.585-5.69.078-11.387.14-17.074-.018-6.778-.19-11.75 5.44-11.784 11.82 0 .484.083.984-.013 1.451-.488 2.343 1.462 6.13-1.022 6.826-3.78 1.062-8.206 1.062-11.54-2.311-1.13-1.14-2.082-2.417-2.584-3.893-2.679-7.865-3.102-15.83-.58-23.818 1.572-4.986 5.848-8.087 11.145-8.176 3.874-.065 7.749-.013 11.623-.013l.002-.014zm6.902-11.12c-.162-1.903-1.185-3.292-3.296-3.35-2.309-.06-3.502 1.336-3.505 3.608-.002 2.106 1.145 3.455 3.241 3.516 2.303.067 3.418-1.36 3.56-3.774z\"><\/path><path fill=\"#ffcf46\" d=\"M80.824 61.572c-4.24 0-8.482-.037-12.722.03-.955.012-2.557-.592-2.607 1.041-.056 1.852 1.663 1.37 2.755 1.381 4.24.053 8.484.098 12.723-.02 2.178-.06 3.067.357 3.23 2.925.737 11.625-4.308 12.63-13.613 14.745-5.338 1.213-11.061.57-16.325-1.788-4.353-1.947-7.024-4.753-6.687-10.007.334-5.186.39-10.439-.009-15.62-.48-6.253 3.41-10.852 10.975-10.854 5.09-.001 10.214-.389 15.26.075 7.215.662 12.872-5.592 13.12-12.864.01-.241-.052-.5.01-.724.636-2.235-1.626-5.557 1.4-6.686 4.573-1.705 9.73.087 12.066 3.557 2.945 4.369 3.343 9.51 3.819 14.53.515 5.411-1.003 10.505-3.276 15.386-1.544 3.31-4.14 4.91-7.757 4.915-4.12.003-8.239 0-12.36 0-.002-.008-.002-.015-.002-.022zm-1.104 10.8c-.453-2.066-1.385-3.476-3.785-3.535-2.496-.06-3.14 1.807-3.127 3.474.014 1.772.508 3.952 3.21 3.748 2.246-.172 3.341-1.563 3.702-3.687z\"><\/path><path fill=\"#386f9f\" d=\"M14.129 114.849c0 2.582.117 5-.055 7.397-.074 1.034 1.066 2.98-1.103 2.978-1.912 0-2.403-1.522-2.342-3.361.117-3.51.034-7.027.034-10.54v-7.998c0-4.82 1.293-6.452 5.903-7.45 4.286-.932 7.654.511 9.386 4.263 1.732 3.753 1.866 7.62.133 11.438-1.708 3.762-4.854 5.166-8.884 4.051-.918-.25-1.845-.467-3.072-.778zm0-9.448c0 1.33.18 2.686-.037 3.98-.502 2.991 1.408 3.728 3.66 4.26 2.227.526 3.754-.421 4.647-2.383 1.501-3.29 1.753-6.683.613-10.162-1.012-3.092-3.349-3.454-6.077-3.07-2.694.383-3.059 2.215-2.824 4.48.1.955.018 1.93.018 2.895zM43.116 114.689c-1.845.48-3.447.992-5.087 1.3-3.59.671-6.248-1.3-7.183-4.894-1.16-4.448-.178-8.879-.148-13.317.013-2.023 1.885-1.234 3.18-2.318 0 4.75.018 8.85-.006 12.947-.013 2.058.519 3.75 2.465 4.835 2.148 1.198 3.91.057 5.78-.712 1.34-.551 1.173-1.676 1.175-2.746.01-3.872-.001-7.74.012-11.612.002-.955-.097-2.122 1.313-2.075 1.257.041 1.804.788 1.783 2.158-.091 6.407.09 12.823-.17 19.221-.197 4.838-3.61 7.793-8.52 8.01-.735.031-1.505.099-1.78-.813-.419-1.404.718-1.139 1.465-1.378 5.401-1.718 6.107-2.744 5.721-8.606zM65.94 98.064c1.429-.675 2.25-1.293 3.153-1.46 5.067-.937 8.95-.58 8.94 6.245-.007 3.515.002 7.031-.007 10.545-.002.984.061 1.942-1.406 2.027-1.547.092-1.887-.793-1.88-2.006.018-3.387.11-6.774.107-10.16-.002-2.63-.539-4.958-3.884-4.95-2.934.005-5.012 2.195-5.027 5.217a899.58 899.58 0 00.003 9.814c.003 1.162.028 2.181-1.652 2.085-1.513-.09-1.327-1.11-1.327-2.049-.01-8.6.032-17.209-.041-25.815-.013-1.508.582-2.444 1.92-2.508 1.888-.087 1.023 1.564 1.051 2.392.123 3.371.05 6.75.05 10.623zM81.93 105.775c-.191-6.715 2.994-10.3 8.76-10.092 2.894.106 5.065 1.39 6.466 3.89 2.475 4.422 2.14 8.846-.538 12.987-1.84 2.844-4.67 4.185-8.12 3.453-3.402-.72-6.066-3.783-6.548-7.353-.128-.945-.02-1.924-.02-2.885zm13.32.157c-.152-1.172-.125-2.806-.613-4.264-.667-2-1.883-3.61-4.364-3.72-2.503-.108-3.752 1.355-4.587 3.38-1.311 3.179-1.226 6.371.194 9.493.912 2.011 2.32 3.483 4.76 3.075 2.403-.401 3.821-1.976 4.312-4.313.223-1.059.187-2.168.298-3.65zM102.257 106.827c0-1.212-.023-2.422.004-3.628.056-2.325-.685-4.901 2.45-6.089 3.59-1.356 7.148-2.372 10.762-.273 1.352.786 1.85 2.214 1.864 3.73.037 4.231-.019 8.464.038 12.695.02 1.476-.368 2.214-2.027 2.174-1.818-.043-1.435-1.283-1.423-2.273.043-3.38.278-6.757.214-10.132-.084-4.25-2.416-5.983-6.389-4.94-1.648.434-2.678 1.234-2.597 3.274.161 3.982.037 7.978.052 11.967.004 1.156.021 2.18-1.647 2.083-1.528-.088-1.278-1.145-1.29-2.062-.028-2.176-.008-4.353-.011-6.526zM58.689 97.403c-.25.296-.46.76-.68.764-3.964.055-2.864 3.014-2.966 5.209-.097 2.045 0 4.1-.029 6.151-.03 2.038.147 3.932 2.627 4.473.711.154 1.035.564.887 1.274-.163.784-.788.753-1.407.745-2.85-.05-4.963-2.065-5.047-5.015-.086-3.014.031-6.035-.04-9.046-.037-1.43.706-3.255-1.6-3.822-.253-.061-.343-.778-.508-1.187 3.076-.965 1.8-3.618 2.222-5.631.2-.953 1.105-1.214 1.96-1.295.865-.082.872.618.9 1.203.114 2.32-1.087 5.425 3.184 5.256.143-.005.31.562.497.92z\"><\/path><\/g>\r\n            <\/svg>\r\n          \t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-24944ae elementor-widget elementor-widget-html\" data-id=\"24944ae\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\r\n            <svg viewBox=\"0 0 128 128\">\r\n            <path fill=\"#00618A\" d=\"M0 91.313h4.242V74.566l6.566 14.598c.773 1.77 1.832 2.391 3.914 2.391s3.098-.621 3.871-2.391l6.566-14.598v16.746h4.242V74.594c0-1.633-.652-2.422-2-2.828-3.223-1.004-5.383-.137-6.363 2.039l-6.441 14.41-6.238-14.41c-.937-2.176-3.14-3.043-6.359-2.039-1.348.406-2 1.195-2 2.828zM32.93 77.68h4.238v9.227c-.039.5.16 1.676 2.484 1.715h9.223V77.633h4.25c.02 0-.008 14.984-.008 15.047.023 3.695-4.582 4.496-6.707 4.559H33.02v-2.852l13.414-.004c2.73-.285 2.406-1.645 2.406-2.098v-1.113h-9.012c-4.195-.039-6.863-1.871-6.898-3.977-.004-.191.09-9.422 0-9.516zm0 0\"><\/path><path fill=\"#E48E00\" d=\"M56.391 91.313h12.195c1.426 0 2.813-.301 3.914-.816 1.836-.84 2.73-1.984 2.73-3.48v-3.098c0-1.223-1.016-2.367-3.016-3.125-1.059-.41-2.367-.625-3.629-.625h-5.141c-1.711 0-2.527-.516-2.73-1.656-.039-.137-.039-.246-.039-.383V76.2c0-.109 0-.219.039-.355.203-.867.652-1.113 2.16-1.25l.41-.027h12.109v-2.824H63.488c-1.711 0-2.609.109-3.426.352-2.527.789-3.629 2.039-3.629 4.215v2.473c0 1.902 2.16 3.535 5.789 3.914l1.223.055h4.406c.164 0 .324 0 .449.027 1.344.109 1.914.355 2.324.844.211.195.332.473.324.758v2.477c0 .297-.203.68-.609 1.004-.367.328-.98.543-1.793.598l-.449.027H56.391zm45.297-4.922c0 2.91 2.164 4.539 6.523 4.867l1.227.055h11.051v-2.828h-11.133c-2.488 0-3.426-.625-3.426-2.121V71.738h-4.238V86.39zm-23.75.148V76.457c0-2.559 1.801-4.113 5.355-4.602a7.976 7.976 0 0 1 1.145-.082h8.047c.41 0 .777.027 1.188.082 3.555.488 5.352 2.043 5.352 4.602v10.082c0 2.078-.762 3.188-2.523 3.914l4.18 3.77h-4.926l-3.379-3.051-3.402.215H84.44a9.23 9.23 0 0 1-2.492-.352c-2.699-.734-4.008-2.152-4.008-4.496zm4.578-.246c0 .137.039.273.082.438.246 1.172 1.348 1.824 3.023 1.824h3.852l-3.539-3.195h4.926l3.086 2.789c.57-.305.941-.766 1.074-1.363.039-.137.039-.273.039-.41v-9.668c0-.109 0-.246-.039-.383-.246-1.09-1.348-1.715-2.984-1.715h-6.414c-1.879 0-3.105.816-3.105 2.098zm0 0\"><\/path><path fill=\"#00618A\" d=\"M124.219 67.047c-2.605-.07-4.598.172-6.301.891-.484.203-1.258.207-1.336.813.266.281.309.699.52 1.039.406.66 1.094 1.539 1.707 2l2.074 1.484c1.273.777 2.699 1.223 3.93 2 .723.461 1.441 1.039 2.148 1.559.348.254.582.656 1.039.816v-.074c-.238-.305-.301-.723-.52-1.039l-.965-.965c-.941-1.25-2.137-2.348-3.41-3.262-1.016-.727-3.281-1.711-3.707-2.891l-.074-.074c.719-.078 1.563-.34 2.223-.516 1.117-.301 2.113-.223 3.262-.52l1.559-.449v-.293c-.582-.598-.996-1.387-1.633-1.93-1.656-1.41-3.469-2.824-5.336-4.004-1.035-.652-2.312-1.074-3.41-1.629-.367-.187-1.016-.281-1.262-.594-.574-.734-.887-1.664-1.332-2.52l-2.668-5.633c-.562-1.285-.93-2.555-1.633-3.707-3.363-5.535-6.988-8.875-12.602-12.156-1.191-.699-2.633-.973-4.148-1.332l-2.449-.148c-.496-.211-1.012-.82-1.48-1.113-1.859-1.176-6.629-3.73-8.008-.371-.867 2.121 1.301 4.191 2.078 5.266.543.754 1.242 1.598 1.629 2.445.258.555.301 1.113.52 1.703.539 1.453 1.008 3.031 1.707 4.375.352.68.738 1.395 1.184 2 .273.371.742.539.816 1.113-.457.641-.484 1.633-.742 2.445-1.16 3.652-.723 8.191.965 10.898.516.828 1.734 2.609 3.41 1.926 1.465-.598 1.137-2.445 1.555-4.078.098-.367.039-.641.223-.887v.074l1.336 2.668c.988 1.59 2.738 3.25 4.223 4.371.773.582 1.379 1.59 2.375 1.93V68.6h-.074c-.195-.297-.496-.422-.742-.664-.582-.57-1.227-1.277-1.703-1.93-1.352-1.832-2.547-3.84-3.633-5.93-.52-.996-.973-2.098-1.41-3.113-.168-.391-.164-.984-.516-1.184-.48.742-1.187 1.344-1.559 2.223-.594 1.402-.668 3.117-.891 4.891l-.148.074c-1.031-.25-1.395-1.312-1.777-2.223-.973-2.305-1.152-6.02-.297-8.672.219-.687 1.219-2.852.813-3.484-.191-.633-.828-1-1.184-1.484a11.7 11.7 0 0 1-1.187-2.074c-.793-1.801-1.164-3.816-2-5.633-.398-.871-1.074-1.75-1.629-2.523-.617-.855-1.305-1.484-1.781-2.52-.168-.367-.398-.957-.148-1.336.078-.254.195-.359.445-.441.43-.332 1.629.109 2.074.293 1.191.496 2.184.965 3.191 1.633.48.32.969.941 1.555 1.113h.668c1.043.238 2.211.07 3.188.367 1.723.523 3.27 1.34 4.668 2.227 4.273 2.695 7.766 6.535 10.156 11.117.387.738.551 1.441.891 2.223.684 1.578 1.543 3.203 2.223 4.746s1.34 3.094 2.297 4.375c.504.672 2.453 1.031 3.336 1.406.621.262 1.637.535 2.223.891 1.125.676 2.211 1.48 3.266 2.223.523.375 2.141 1.188 2.223 1.855zM91.082 38.805a5.26 5.26 0 0 0-1.332.148v.074h.074c.258.535.715.879 1.035 1.336l.742 1.555.074-.07c.461-.324.668-.844.668-1.633-.187-.195-.211-.437-.371-.668-.211-.309-.621-.48-.891-.742zm0 0\"><\/path>\r\n            <\/svg>\r\n          \t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-eaebae3 elementor-widget elementor-widget-html\" data-id=\"eaebae3\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t\r\n            <svg viewBox=\"0 0 128 128\">\r\n              <path d=\"M 63.715583,49.36125 55.824236,45.180125 42.126013,37.923316 c -0.0126,-0.01263 -0.03751,-0.01263 -0.05012,-0.01263 -0.500111,-0.238083 -1.012827,0.263201 -0.825266,0.764635 l 6.979803,17.843778 0.0014,0.0038 c 0.0075,0.01745 0.01365,0.03504 0.02116,0.05264 0.286443,0.665521 0.911545,1.076565 1.591864,1.238245 0.05747,0.01248 0.09858,0.02391 0.167604,0.03775 0.06872,0.01534 0.164904,0.03625 0.24743,0.04241 0.0138,0.0014 0.02626,0.0014 0.04006,0.0026 h 0.01005 c 0.0099,0.0012 0.01996,0.0012 0.03001,0.0026 h 0.01365 c 0.0089,0.0012 0.01876,0.0012 0.02761,0.0012 h 0.01621 c 0.01005,0.0012 0.01996,0.0012 0.03001,0.0012 v 0 c 8.839654,0.96602 17.757783,0.96602 26.597437,0 v 0 c 0.106234,0 0.210068,-0.005 0.31,-0.01504 0.03256,-0.0038 0.06377,-0.0075 0.09513,-0.01128 0.0038,-0.0012 0.0087,-0.0012 0.01245,-0.0024 0.02131,-0.0026 0.04246,-0.0063 0.06377,-0.01008 0.03121,-0.0038 0.06257,-0.01008 0.09378,-0.01624 0.06257,-0.01384 0.09093,-0.02391 0.175856,-0.05309 0.08478,-0.02918 0.225673,-0.08031 0.313752,-0.122877 0.08823,-0.04271 0.149298,-0.08347 0.223122,-0.129945 0.09123,-0.0576 0.178107,-0.11656 0.266186,-0.182737 0.03796,-0.02918 0.06392,-0.04783 0.09138,-0.07415 l -0.01501,-0.0087 z\" fill=\"#ff4b4b\" id=\"path237\" style=\"stroke-width:0.150224\"><\/path>  <path d=\"m 85.32781,37.923466 h -0.01245 l -13.703324,7.256809 7.61751,11.371607 6.962247,-17.876415 v -0.02512 c 0.175107,-0.5264 -0.362517,-1.002567 -0.863979,-0.726884\" fill=\"#7d353b\" id=\"path239\" style=\"stroke-width:0.150224\"><\/path>  <path d=\"m 64.445869,34.472835 c -0.350213,-0.512564 -1.112909,-0.512564 -1.450518,0 l -7.171115,10.70729 7.891347,4.181125 14.954878,7.922329 c 0.09393,-0.0922 0.169255,-0.181984 0.24878,-0.276887 0.112537,-0.13912 0.217571,-0.288317 0.310151,-0.45496 l -7.61751,-11.371607 z\" fill=\"#bd4043\" id=\"path241\" style=\"stroke-width:0.150224\"><\/path>  <path d=\"m 13.8956,75.79348 h 2.759691 C 16.5288,72.232154 13.251742,69.56977 8.698222,69.56977 c -4.5073051,0 -8.04889841,2.627792 -8.04889841,6.592491 0,3.181114 2.29964241,5.071344 5.97913021,6.131665 l 2.8977355,0.829758 c 2.4836017,0.69154 4.6914147,1.56747 4.6914147,3.918676 0,2.58177 -2.483752,4.287458 -5.7492562,4.287458 -2.8057558,0 -5.2893576,-1.244712 -5.5193818,-3.918676 H 0.00531568 c 0.27608913,3.872654 3.40369882,6.500446 8.46303212,6.500446 5.4272522,0 8.5087972,-2.996724 8.5087972,-6.823055 0,-4.425826 -4.185452,-5.854928 -6.623138,-6.500446 L 7.9623845,79.94272 c -1.7477643,-0.461127 -4.55337,-1.38308 -4.55337,-3.918677 0,-2.259011 2.0696181,-3.918677 5.1972278,-3.918677 2.8516707,0 5.0134187,1.360069 5.2893577,3.688114 z m 14.43556,0 h -3.771467 v -4.241285 h -2.713626 v 4.241285 h -2.667712 v 2.305183 h 2.667712 v 11.06434 c 0,3.088919 2.483601,4.564194 4.783394,4.564194 1.011776,0 1.655784,-0.18439 2.023703,-0.322759 l -0.552028,-2.443401 c -0.229874,0.04602 -0.597793,0.138368 -1.195736,0.138368 -1.195886,0 -2.345707,-0.368931 -2.345707,-2.673965 V 78.098663 h 3.771467 z m 3.434459,17.703154 h 2.713626 V 82.293926 c 0,-2.397379 1.885659,-4.14924 4.46139,-4.14924 0.724434,0 1.471825,0.138368 1.655785,0.18439 v -2.766009 c -0.310451,-0.02316 -1.023331,-0.04617 -1.425761,-0.04617 -2.115833,0 -3.955577,1.198689 -4.599434,2.950551 h -0.18396 V 75.79348 h -2.621646 z m 18.267347,0.368781 c 3.587658,0 6.209305,-1.797884 7.037122,-4.471849 l -2.621646,-0.737562 c -0.689923,1.844057 -2.288239,2.76601 -4.415476,2.76601 -3.185078,0 -5.381187,-2.06304 -5.507678,-5.854929 h 12.820739 v -1.152517 c 0,-6.592641 -3.909512,-8.851501 -7.589,-8.851501 -4.783394,0 -7.956919,3.780308 -7.956919,9.220283 0,5.440125 3.12761,9.082065 8.232858,9.082065 z M 44.525288,83.215879 c 0.183959,-2.754579 2.127237,-5.209411 5.231739,-5.209411 2.94365,0 4.829459,2.212838 4.829459,5.209411 z m 21.49849,10.695709 c 3.081545,0 4.691415,-1.659666 5.243293,-2.812183 h 0.138045 v 2.397229 h 2.713626 V 81.832799 c 0,-5.624365 -4.277431,-6.269732 -6.531159,-6.269732 -2.667711,0 -5.703341,0.921953 -7.083036,4.149089 l 2.575581,0.922104 c 0.597943,-1.290885 2.0123,-2.673965 4.599435,-2.673965 2.495155,0 3.725553,1.325477 3.725553,3.595918 v 0.0922 c 0,1.313896 -1.333931,1.19869 -4.55337,1.613644 -3.277208,0.426384 -6.853163,1.152516 -6.853163,5.209411 0,3.4577 2.667561,5.440125 6.025195,5.440125 z m 0.413984,-2.443402 c -2.161748,0 -3.725553,-0.968125 -3.725553,-2.858355 0,-2.07462 1.885809,-2.719987 4.001492,-2.996573 1.149821,-0.138368 4.231516,-0.461127 4.691415,-1.014299 v 2.489574 c 0,2.212838 -1.747765,4.379653 -4.967354,4.379653 z m 11.98632,2.028448 h 2.713626 v -11.06449 c 0,-2.5932 1.885808,-4.425676 4.001491,-4.425676 2.058365,0 3.495679,1.348338 3.495679,3.365354 v 12.124812 h 2.759541 V 81.971167 c 0,-2.282022 1.42591,-3.964699 3.909512,-3.964699 1.931723,0 3.587508,1.025729 3.587508,3.64194 v 11.848226 h 2.713631 V 81.648408 c 0,-4.16067 -2.230625,-6.085341 -5.381192,-6.085341 -2.529667,0 -4.380964,1.163947 -5.289358,2.996573 h -0.183959 c -0.873882,-1.89023 -2.41473,-2.996573 -4.73748,-2.996573 -2.299642,0 -4.001491,1.106343 -4.737329,2.996573 H 81.045728 V 75.79348 H 78.424082 Z M 108.63273,69.892529 h -2.71362 v 23.604105 h 2.71362 z m 4.32275,23.604105 h 2.71363 V 75.79348 h -2.71363 z m 1.37984,-20.653705 c 1.05785,0 1.93173,-0.829758 1.93173,-1.844057 0,-1.014148 -0.87388,-1.844056 -1.93173,-1.844056 -1.05799,0 -1.93187,0.829908 -1.93187,1.844056 0,1.014299 0.87388,1.844057 1.93187,1.844057 z m 13.33736,2.950551 h -3.77147 v -4.241285 h -2.71362 v 4.241285 h -2.66771 v 2.305183 h 2.66771 v 11.06434 c 0,3.088919 2.4836,4.564194 4.78339,4.564194 1.01178,0 1.65579,-0.18439 2.0237,-0.322759 l -0.55187,-2.443401 c -0.23003,0.04602 -0.59795,0.138368 -1.19589,0.138368 -1.19589,0 -2.34571,-0.368931 -2.34571,-2.673965 V 78.098663 h 3.77147 z\" fill=\"#ffff\" id=\"path243\" style=\"stroke-width:0.150224\"><\/path>\r\n            <\/svg>\r\n          \t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>(IGS Energy via Snowflake) Overview Kermit Troy Berry spearheaded the development of a Snowflake based demand forecasting and anomaly detection&#8230; <\/p>\n<div class=\"readmore\"><a href=\"https:\/\/troyberry.dev\/index.php\/demand-forecasting-platform-for-utilities\/\" class=\"lnk\">Read more<\/a><\/div>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-1142","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/troyberry.dev\/index.php\/wp-json\/wp\/v2\/pages\/1142","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/troyberry.dev\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/troyberry.dev\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/troyberry.dev\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/troyberry.dev\/index.php\/wp-json\/wp\/v2\/comments?post=1142"}],"version-history":[{"count":11,"href":"https:\/\/troyberry.dev\/index.php\/wp-json\/wp\/v2\/pages\/1142\/revisions"}],"predecessor-version":[{"id":1201,"href":"https:\/\/troyberry.dev\/index.php\/wp-json\/wp\/v2\/pages\/1142\/revisions\/1201"}],"wp:attachment":[{"href":"https:\/\/troyberry.dev\/index.php\/wp-json\/wp\/v2\/media?parent=1142"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}