Case Study

DELCORA

FREYA SYSTEMS DEVELOPED AN ALGORITHM TO REDUCE OPERATIONAL COSTS IN WASTEWATER TREATMENT

NEED

Identify a data-driven optimization within the treatment process.

The Background

Wastewater treatment is a process that removes contaminants from wastewater to produce an effluent suitable for reentry into the water cycle. To generate such an effluent, wastewater treatment plants often employ automated systems designed to treat waste. Freya Systems partnered with a prominent wastewater treatment plant to identify data-driven optimization opportunities within the treatment process. This particular plant moves wastewater through its treatment system until the waste reaches a series of tanks, which serves as one of the major stages of effluent conversion. In these tanks, the amount of dissolved oxygen (D.O.) present is carefully measured and maintained by a series of automated blowers and valves.

APPROACH

A random forest algorithm was trained to predict full blower use.

The Objective

Predict whether all blowers will be needed within the next 30 minutes to enable the implementation of cost-saving interventions.

The Approach

The client provided approximately three years of historical data that measured all major components of the treatment process at a rate of once per minute. In addition to measuring the D.O. in each tank, the data included measurements of the openings of valves, blower activity, pressure, airflow, and other aspects of the automated system. The data also encompassed other information pertinent to the treatment process, like weather and the pH of the wastewater soon after entering the treatment facility. A random forest algorithm was then trained using features capturing the state of the treatment system both at each minute and in the recent past to predict whether all blowers were required 30 minutes at each point in time.

Causal graph depicting the wastewater treatment system Identify a data-driven optimization within the treatment process A random forest algorithm was trained to predict full blower use Among all days in which all blowers were used concurrently, the algorithm successfully predicted the occurrence beforehand every time.

“The whole experience with Freya was great! We have been trending their control algorithm data daily and are pleasantly surprised by its predictions”. – Clint Swope, DELCORA

RESULTS

Among all days in which all blowers were used concurrently, the algorithm successfully predicted the occurrence beforehand every time

The Result

Since the concurrent use of all blowers is somewhat rare, precision and recall were used to evaluate the performance of the algorithm. The initial algorithm exhibited strong performance so Freya Systems implemented the algorithm in the customer’s environment and monitored the performance over several months. During this monitoring phase performance was as follows: Among all days in which the algorithm predicted that all blowers would be used concurrently, all blowers were used concurrently on approximately two out of every three days.

  • Among all days in which all blowers were used concurrently, the algorithm successfully predicted the occurrence beforehand every time.
  • Following this monitoring period, the client deemed the algorithm a success and is actively working to fully integrate the algorithm’s predictions into the automated treatment process.

Make Our Team Yours.

Freya Team July 2020

[gravityform id="3" title="false" description="false" ajax="true"]
<div class='gf_browser_unknown gform_wrapper gform_legacy_markup_wrapper' id='gform_wrapper_3' ><div id='gf_3' class='gform_anchor' tabindex='-1'></div><form method='post' enctype='multipart/form-data' target='gform_ajax_frame_3' id='gform_3' action='/case-studies/delcora/#gf_3' > <input type='hidden' class='gforms-pum' value='{"closepopup":false,"closedelay":0,"openpopup":false,"openpopup_id":0}' /> <div class='gform_body gform-body'><ul id='gform_fields_3' class='gform_fields top_label form_sublabel_below description_below'><li id="field_3_1" class="gfield gfield_contains_required field_sublabel_below field_description_below hidden_label gfield_visibility_visible" data-js-reload="field_3_1"><label class='gfield_label' for='input_3_1' >Email<span class="gfield_required"><span class="gfield_required gfield_required_asterisk">*</span></span></label><div class='ginput_container ginput_container_email'> <input name='input_1' id='input_3_1' type='text' value='' class='large' placeholder='Email Address*' aria-required="true" aria-invalid="false" /> </div></li><li id="field_3_2" class="gfield gform_validation_container field_sublabel_below field_description_below gfield_visibility_visible" data-js-reload="field_3_2"><label class='gfield_label' for='input_3_2' >Name</label><div class='ginput_container'><input name='input_2' id='input_3_2' type='text' value='' /></div><div class='gfield_description' id='gfield_description_3_2'>This field is for validation purposes and should be left unchanged.</div></li></ul></div> <div class='gform_footer top_label'> <input type='submit' id='gform_submit_button_3' class='gform_button button' value='Download' onclick='if(window["gf_submitting_3"]){return false;} window["gf_submitting_3"]=true; ' onkeypress='if( event.keyCode == 13 ){ if(window["gf_submitting_3"]){return false;} window["gf_submitting_3"]=true; jQuery("#gform_3").trigger("submit",[true]); }' /> <input type='hidden' name='gform_ajax' value='form_id=3&amp;title=&amp;description=&amp;tabindex=0' /> <input type='hidden' class='gform_hidden' name='is_submit_3' value='1' /> <input type='hidden' class='gform_hidden' name='gform_submit' value='3' /> <input type='hidden' class='gform_hidden' name='gform_unique_id' value='' /> <input type='hidden' class='gform_hidden' name='state_3' value='WyJbXSIsImViMDRhZTg4MTExYWY4ODM1NDQ2Y2ExNzIxOWE0ZjQwIl0=' /> <input type='hidden' class='gform_hidden' name='gform_target_page_number_3' id='gform_target_page_number_3' value='0' /> <input type='hidden' class='gform_hidden' name='gform_source_page_number_3' id='gform_source_page_number_3' value='1' /> <input type='hidden' name='gform_field_values' value='' /> </div> <p style="display: none !important;"><label>&#916;<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_2" name="ak_js" value="3"/><script>document.getElementById( "ak_js_2" ).setAttribute( "value", ( new Date() ).getTime() );</script></p></form> </div> <iframe style='display:none;width:0px;height:0px;' src='about:blank' name='gform_ajax_frame_3' id='gform_ajax_frame_3' title='This iframe contains the logic required to handle Ajax powered Gravity Forms.'></iframe> <script type="text/javascript"> gform.initializeOnLoaded( function() {gformInitSpinner( 3, 'https://freyasystems.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery('#gform_ajax_frame_3').on('load',function(){var contents = jQuery(this).contents().find('*').html();var is_postback = contents.indexOf('GF_AJAX_POSTBACK') >= 0;if(!is_postback){return;}var form_content = jQuery(this).contents().find('#gform_wrapper_3');var is_confirmation = jQuery(this).contents().find('#gform_confirmation_wrapper_3').length > 0;var is_redirect = contents.indexOf('gformRedirect(){') >= 0;var is_form = form_content.length > 0 && ! is_redirect && ! is_confirmation;var mt = parseInt(jQuery('html').css('margin-top'), 10) + parseInt(jQuery('body').css('margin-top'), 10) + 100;if(is_form){jQuery('#gform_wrapper_3').html(form_content.html());if(form_content.hasClass('gform_validation_error')){jQuery('#gform_wrapper_3').addClass('gform_validation_error');} else {jQuery('#gform_wrapper_3').removeClass('gform_validation_error');}setTimeout( function() { /* delay the scroll by 50 milliseconds to fix a bug in chrome */ jQuery(document).scrollTop(jQuery('#gform_wrapper_3').offset().top - mt); }, 50 );if(window['gformInitDatepicker']) {gformInitDatepicker();}if(window['gformInitPriceFields']) {gformInitPriceFields();}var current_page = jQuery('#gform_source_page_number_3').val();gformInitSpinner( 3, 'https://freyasystems.com/wp-content/plugins/gravityforms/images/spinner.svg' );jQuery(document).trigger('gform_page_loaded', [3, current_page]);window['gf_submitting_3'] = false;}else if(!is_redirect){var confirmation_content = jQuery(this).contents().find('.GF_AJAX_POSTBACK').html();if(!confirmation_content){confirmation_content = contents;}setTimeout(function(){jQuery('#gform_wrapper_3').replaceWith(confirmation_content);jQuery(document).scrollTop(jQuery('#gf_3').offset().top - mt);jQuery(document).trigger('gform_confirmation_loaded', [3]);window['gf_submitting_3'] = false;wp.a11y.speak(jQuery('#gform_confirmation_message_3').text());}, 50);}else{jQuery('#gform_3').append(contents);if(window['gformRedirect']) {gformRedirect();}}jQuery(document).trigger('gform_post_render', [3, current_page]);} );} ); </script>