def test_compute_traffic_light_bounds(): datastore = { "test_data": pytest.test_comparer_df, } conf = { "monitoring_rules": { "the_feature:mae": [8, 4, 2, 2], "dummy_feature:*": [0, 0, 0, 0], "mse": [0.2, 0.11, 0.09, 0], "mae": [0, 0, 0, 0], "*": [0, 0, 0, 0], } } module = ComputeTLBounds( read_key="test_data", store_key="output_data", ignore_features=["dummy_feature"], monitoring_rules=conf["monitoring_rules"], ) output = module.transform(datastore)["output_data"] assert "dummy_feature:mae" not in output.keys() assert output["the_feature:mae"] == [8, 4, 2, 2] assert output["the_feature:mse"] == [0.2, 0.11, 0.09, 0]
def test_compute_traffic_light_funcs(): datastore = {"test_data": pytest.test_comparer_df} conf = { "monitoring_rules": { "the_feature:mae": [8, 4, 2, 2], "dummy_feature:*": [0, 0, 0, 0], "mse": [0.2, 0.11, 0.09, 0], "mae": [0, 0, 0, 0], "*": [0, 0, 0, 0], } } module = ComputeTLBounds( read_key="test_data", apply_funcs_key="output_data", monitoring_rules=conf["monitoring_rules"], ) output = module.transform(datastore)["output_data"] assert len(output) == 3 assert output[0]["features"] == ["dummy_feature"] assert output[0]["metrics"] == ["mae"] assert output[0]["args"] == (0, 0, 0, 0) assert output[1]["features"] == ["the_feature"] assert output[1]["metrics"] == ["mae"] assert output[1]["args"] == (8, 4, 2, 2) assert output[2]["features"] == ["the_feature"] assert output[2]["metrics"] == ["mse"] assert output[2]["args"] == (0.2, 0.11, 0.09, 0)
def test_report_traffic_light_bounds(): datastore = dict() datastore["to_profile"] = {"asc_numbers": get_test_data()} conf = { "monitoring_rules": { "the_feature:mae": [8, 4, 2, 0.15], "mse": [0.2, 0.11, 0.09, 0], "mae": [1, 0, 0, 0], "*_pull": [7, 4, -4, -7] }, "pull_rules": { "*_pull": [7, 4, -4, -7] } } m1 = ApplyFunc(apply_to_key="to_profile", features=["asc_numbers"], metrics=['a', 'b']) m1.add_apply_func(expanding_mean, suffix='_std', entire=True) m1.add_apply_func(expanding_std, suffix='_mean', entire=True) m2 = ApplyFunc(apply_to_key="to_profile", features=["asc_numbers"]) m2.add_apply_func(pull, suffix='_pull', axis=1, suffix_mean='_mean', suffix_std='_std') ctlb = ComputeTLBounds( read_key="to_profile", store_key="static_tlb", monitoring_rules=conf["monitoring_rules"], ) m3 = ComputeTLBounds(read_key="to_profile", monitoring_rules=conf["pull_rules"], apply_funcs_key="dynamic_tlb", func=pull_bounds, metrics_wide=True, axis=1) m4 = ApplyFunc( apply_to_key=m3.read_key, assign_to_key='dtlb', apply_funcs_key="dynamic_tlb", ) rg = SectionGenerator(read_key="to_profile", store_key="section", section_name="Profiles", dynamic_bounds='dtlb', static_bounds='static_tlb') pipeline = Pipeline(modules=[m1, m2, ctlb, m3, m4, rg]) datastore = pipeline.transform(datastore)
def test_traffic_light_summary_combination(): datastore = {"test_data": test_comparer_df} conf = { "monitoring_rules": { "the_feature:mae": [8, 4, 2, 0.15], "dummy_feature:*": [0, 0, 0, 0], "mse": [0.2, 0.11, 0.09, 0], "mae": [0, 0, 0, 0], "*": [0, 0, 0, 0], } } ctlb = ComputeTLBounds( read_key="test_data", store_key="traffic_light_bounds", apply_funcs_key="traffic_light_funcs", ignore_features=["dummy_feature"], monitoring_rules=conf["monitoring_rules"], prefix="tl_", ) atlb = ApplyFunc( apply_to_key=ctlb.read_key, assign_to_key="output_data", apply_funcs_key="traffic_light_funcs", ) tls = ApplyFunc( apply_to_key="output_data", apply_funcs=[dict(func=traffic_light_summary, axis=1, suffix="")], assign_to_key="alerts", ) asum = AlertsSummary(read_key="alerts") pipeline = Pipeline(modules=[ctlb, atlb, tls, asum]) datastore = pipeline.transform(datastore) alerts = datastore["alerts"] assert "_AGGREGATE_" in alerts output = datastore["alerts"]["_AGGREGATE_"] assert output["worst"].values[-1] == 2 assert output["n_green"].values[-1] == 1 assert output["n_yellow"].values[-1] == 0 assert output["n_red"].values[-1] == 1
def test_integration_alerting(): datastore = { "test_data": test_comparer_df, } conf = { "monitoring_rules": { "the_feature:mae": [8, 4, 2, 0.15], "dummy_feature:*": [0, 0, 0, 0], "mse": [0.2, 0.11, 0.09, 0], "mae": [0, 0, 0, 0], "*": [0, 0, 0, 0], } } ctlb = ComputeTLBounds( read_key="test_data", store_key="traffic_light_bounds", apply_funcs_key="traffic_light_funcs", ignore_features=["dummy_feature"], monitoring_rules=conf["monitoring_rules"] ) atlb = ApplyFunc( apply_to_key=ctlb.read_key, assign_to_key='output_data', apply_funcs_key="traffic_light_funcs", ) pipeline = Pipeline(modules=[ctlb, atlb]) datastore = pipeline.transform(datastore) output = datastore[atlb.store_key]["the_feature"] alerts_per_color_per_date = pd.DataFrame() for i, color in enumerate(["green", "yellow", "red"]): alerts_per_color_per_date[f"n_{color}"] = (output.values == i).sum(axis=1) alerts_total_per_color = alerts_per_color_per_date.sum(axis=0) assert alerts_total_per_color["n_green"] == 5 assert alerts_total_per_color["n_yellow"] == 1 assert alerts_total_per_color["n_red"] == 4
def test_traffic_light_summary(): datastore = { "test_data": test_comparer_df, } conf = { "monitoring_rules": { "the_feature:mae": [8, 4, 2, 0.15], "dummy_feature:*": [0, 0, 0, 0], "mse": [0.2, 0.11, 0.09, 0], "mae": [0, 0, 0, 0], "*": [0, 0, 0, 0], } } ctlb = ComputeTLBounds( read_key="test_data", store_key="traffic_light_bounds", apply_funcs_key="traffic_light_funcs", ignore_features=["dummy_feature"], monitoring_rules=conf["monitoring_rules"], prefix='tl_' ) atlb = ApplyFunc( apply_to_key=ctlb.read_key, assign_to_key='output_data', apply_funcs_key="traffic_light_funcs", ) tls = ApplyFunc(apply_to_key='output_data', apply_funcs=[dict(func=traffic_light_summary, axis=1, suffix='')], assign_to_key='alerts') pipeline = Pipeline(modules=[ctlb, atlb, tls]) datastore = pipeline.transform(datastore) output = datastore['alerts']["the_feature"] assert output["worst"].values[-1] == 2 assert output["n_green"].values[-1] == 1 assert output["n_yellow"].values[-1] == 0 assert output["n_red"].values[-1] == 1