Esempio n. 1
0
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]
Esempio n. 2
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)
Esempio n. 3
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)
Esempio n. 4
0
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
Esempio n. 5
0
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
Esempio n. 6
0
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