A user-friendly wrapper function that detects data drift in streaming data without requiring explicit for-loops. This function processes the entire data stream and returns all detected drift points (and optionally warning points) as a dataframe.
Usage
detect_drift(
stream,
method = c("ddm", "eddm", "page_hinkley", "hddm_a", "hddm_w", "kswin", "adwin"),
include_warnings = TRUE,
...
)Arguments
- stream
Numeric vector representing the data stream to monitor.
- method
Character string specifying the drift detection method to use. Options are: "ddm", "eddm", "page_hinkley", "hddm_a", "hddm_w", "kswin". Default is "ddm".
- include_warnings
Logical indicating whether to include warning detections in the results (applicable for DDM, EDDM, HDDM_A, and HDDM_W). Default is TRUE.
- ...
Additional parameters to pass to the specific detector constructor. See individual detector documentation for available parameters.
Value
A data.frame with the following columns:
- index
Integer index in the stream where detection occurred
- value
Numeric value at that index
- type
Character indicating "drift" or "warning"
If no drift or warnings are detected, returns an empty data.frame with the same structure.
Details
This function provides a simplified interface to all streaming drift detectors in the datadriftR package. Instead of manually iterating through the stream and checking for drift at each point, users can simply pass the entire stream to this function and receive a dataframe with all drift detection results.
The function supports the following drift detection methods:
ddm: Drift Detection Methodeddm: Early Drift Detection Methodpage_hinkley: Page-Hinkley Testhddm_a: HDDM with Adaptive Windowshddm_w: HDDM with Weighted Windowskswin: Kolmogorov-Smirnov Windowingadwin: ADaptive WINdowing
Examples
library(datadriftR)
set.seed(123)
# Generate synthetic stream with drift at index 501
pre <- sample(c(0,1), 500, replace = TRUE, prob = c(0.7, 0.3))
post <- sample(c(0,1), 500, replace = TRUE, prob = c(0.3, 0.7))
stream <- c(pre, post)
# Detect drift using DDM
results <- detect_drift(stream, method = "ddm")
print(results)
#> index value type
#> 1 514 1 warning
#> 2 516 1 warning
#> 3 517 1 warning
#> 4 518 0 warning
#> 5 519 1 warning
#> 6 520 0 warning
#> 7 521 1 warning
#> 8 522 1 warning
#> 9 523 1 warning
#> 10 524 1 warning
#> 11 525 1 warning
#> 12 526 1 warning
#> 13 527 0 warning
#> 14 528 1 warning
#> 15 529 0 warning
#> 16 530 1 warning
#> 17 531 0 warning
#> 18 532 1 warning
#> 19 533 1 warning
#> 20 534 0 warning
#> 21 535 1 warning
#> 22 536 0 warning
#> 23 537 1 warning
#> 24 538 0 warning
#> 25 539 1 warning
#> 26 540 1 warning
#> 27 541 0 warning
#> 28 542 1 warning
#> 29 543 0 warning
#> 30 544 1 warning
#> 31 545 0 warning
#> 32 546 0 warning
#> 33 547 1 warning
#> 34 548 0 warning
#> 35 549 0 warning
#> 36 550 1 warning
#> 37 551 1 warning
#> 38 552 1 warning
#> 39 553 1 warning
#> 40 554 0 warning
#> 41 555 1 warning
#> 42 556 1 warning
#> 43 557 1 warning
#> 44 558 1 warning
#> 45 559 1 warning
#> 46 560 1 drift
#> 47 700 1 warning
#> 48 703 1 warning
#> 49 706 1 warning
#> 50 707 1 warning
#> 51 708 1 warning
#> 52 709 1 warning
#> 53 710 1 warning
#> 54 711 1 warning
#> 55 712 1 warning
#> 56 713 1 warning
#> 57 714 0 warning
#> 58 715 1 warning
#> 59 716 1 warning
#> 60 717 1 warning
#> 61 718 1 warning
#> 62 719 0 warning
#> 63 720 1 warning
#> 64 721 1 warning
#> 65 722 0 warning
#> 66 723 0 warning
#> 67 724 0 warning
#> 68 725 1 warning
#> 69 726 0 warning
#> 70 727 0 warning
#> 71 728 1 warning
#> 72 730 1 warning
#> 73 731 1 warning
#> 74 733 1 warning
#> 75 736 1 warning
#> 76 745 1 warning
#> 77 746 1 warning
#> 78 748 1 warning
#> 79 749 1 warning
#> 80 751 1 warning
#> 81 752 1 warning
#> 82 753 1 warning
#> 83 754 1 warning
#> 84 755 1 warning
#> 85 756 1 warning
#> 86 757 1 warning
#> 87 758 0 warning
#> 88 759 1 warning
#> 89 760 1 warning
#> 90 761 1 warning
#> 91 762 1 warning
#> 92 763 1 warning
#> 93 764 1 warning
#> 94 765 1 warning
#> 95 766 1 warning
#> 96 767 1 warning
#> 97 768 1 warning
#> 98 769 1 warning
#> 99 770 1 warning
#> 100 771 0 warning
#> 101 772 0 warning
#> 102 773 1 warning
#> 103 774 0 warning
#> 104 775 1 warning
#> 105 776 1 warning
#> 106 777 1 warning
#> 107 778 1 warning
#> 108 779 1 warning
#> 109 780 0 warning
#> 110 781 1 warning
#> 111 782 0 warning
#> 112 783 1 warning
#> 113 784 1 warning
#> 114 785 0 warning
#> 115 786 1 warning
#> 116 787 1 warning
#> 117 788 1 warning
#> 118 789 1 warning
#> 119 790 0 warning
#> 120 791 0 warning
#> 121 792 1 warning
#> 122 793 1 warning
#> 123 794 1 warning
#> 124 795 0 warning
#> 125 796 1 warning
#> 126 797 1 warning
#> 127 798 1 warning
#> 128 799 1 warning
#> 129 800 1 warning
#> 130 801 1 warning
#> 131 802 1 warning
#> 132 803 1 warning
#> 133 804 1 warning
#> 134 805 1 warning
#> 135 806 0 warning
#> 136 807 1 warning
#> 137 808 1 warning
#> 138 809 0 warning
#> 139 810 1 warning
#> 140 811 1 warning
#> 141 812 1 warning
#> 142 813 1 warning
#> 143 814 0 warning
#> 144 815 0 warning
#> 145 816 1 warning
#> 146 817 1 warning
#> 147 818 1 warning
#> 148 819 1 warning
#> 149 820 1 warning
#> 150 821 1 warning
#> 151 822 1 warning
#> 152 823 1 warning
#> 153 824 0 warning
#> 154 825 0 warning
#> 155 826 1 warning
#> 156 827 1 warning
#> 157 828 1 warning
#> 158 829 1 warning
#> 159 830 0 warning
#> 160 831 1 warning
#> 161 832 0 warning
#> 162 833 1 warning
#> 163 834 0 warning
#> 164 835 1 warning
#> 165 836 1 warning
#> 166 837 0 warning
#> 167 838 1 warning
#> 168 839 1 warning
#> 169 840 1 warning
#> 170 841 0 warning
#> 171 842 0 warning
#> 172 843 1 warning
#> 173 844 1 warning
#> 174 845 1 warning
#> 175 846 1 warning
#> 176 847 0 warning
#> 177 848 1 warning
#> 178 849 1 warning
#> 179 850 1 warning
#> 180 851 1 warning
#> 181 852 0 warning
#> 182 853 0 warning
#> 183 854 0 warning
#> 184 855 1 warning
#> 185 856 1 warning
#> 186 857 0 warning
#> 187 858 1 warning
#> 188 859 1 warning
#> 189 860 0 warning
#> 190 861 1 warning
#> 191 862 1 warning
#> 192 863 1 warning
#> 193 864 1 warning
#> 194 865 1 warning
#> 195 866 1 warning
#> 196 867 1 warning
#> 197 868 1 warning
#> 198 869 1 warning
#> 199 870 1 warning
#> 200 871 1 warning
#> 201 872 1 warning
#> 202 873 0 warning
#> 203 874 1 warning
#> 204 875 0 warning
#> 205 876 1 warning
#> 206 877 1 warning
#> 207 878 1 warning
#> 208 879 0 warning
#> 209 880 1 warning
#> 210 881 1 warning
#> 211 882 0 warning
#> 212 883 1 warning
#> 213 884 1 warning
#> 214 885 0 warning
#> 215 886 0 warning
#> 216 887 1 warning
#> 217 888 1 warning
#> 218 889 1 warning
#> 219 890 1 warning
#> 220 891 1 warning
#> 221 892 0 warning
#> 222 893 1 warning
#> 223 894 1 warning
#> 224 895 0 warning
#> 225 896 0 warning
#> 226 897 1 warning
#> 227 898 1 warning
#> 228 899 1 warning
#> 229 900 0 warning
#> 230 901 0 warning
#> 231 902 1 warning
#> 232 903 0 warning
#> 233 904 1 warning
#> 234 905 1 warning
#> 235 906 1 warning
#> 236 907 0 warning
#> 237 908 0 warning
#> 238 909 0 warning
#> 239 910 1 warning
#> 240 911 1 warning
#> 241 912 1 warning
#> 242 913 0 warning
#> 243 914 1 warning
#> 244 915 1 warning
#> 245 916 0 warning
#> 246 917 1 warning
#> 247 918 1 warning
#> 248 919 1 warning
#> 249 920 1 warning
#> 250 921 0 warning
#> 251 922 1 warning
#> 252 923 1 warning
#> 253 924 0 warning
#> 254 925 1 warning
#> 255 926 1 warning
#> 256 927 1 warning
#> 257 928 1 warning
#> 258 929 1 warning
#> 259 930 0 warning
#> 260 931 0 warning
#> 261 932 1 warning
#> 262 933 0 warning
#> 263 934 1 warning
#> 264 935 0 warning
#> 265 936 1 warning
#> 266 937 1 warning
#> 267 938 0 warning
#> 268 939 0 warning
#> 269 940 1 warning
#> 270 941 0 warning
#> 271 942 1 warning
#> 272 943 1 warning
#> 273 944 1 warning
#> 274 945 1 warning
#> 275 946 1 warning
#> 276 947 1 warning
#> 277 948 1 warning
#> 278 949 1 warning
#> 279 950 1 warning
#> 280 951 1 warning
#> 281 952 1 warning
#> 282 953 0 warning
#> 283 954 1 warning
#> 284 955 1 warning
#> 285 956 0 warning
#> 286 957 1 warning
#> 287 958 1 warning
#> 288 959 1 warning
#> 289 960 1 warning
#> 290 961 1 warning
#> 291 962 1 warning
#> 292 963 1 warning
#> 293 964 1 warning
#> 294 965 0 warning
#> 295 966 1 warning
#> 296 967 1 warning
#> 297 968 1 warning
#> 298 969 0 warning
#> 299 970 1 warning
#> 300 971 0 warning
#> 301 972 1 warning
#> 302 973 0 warning
#> 303 974 1 warning
#> 304 975 1 warning
#> 305 976 1 warning
#> 306 977 0 warning
#> 307 978 1 warning
#> 308 979 1 warning
#> 309 980 1 warning
#> 310 981 1 warning
#> 311 982 0 warning
#> 312 983 0 warning
#> 313 984 1 warning
#> 314 985 0 warning
#> 315 986 0 warning
#> 316 987 1 warning
#> 317 988 1 warning
#> 318 989 1 warning
#> 319 990 1 warning
#> 320 991 1 warning
#> 321 992 1 warning
#> 322 993 1 warning
#> 323 994 1 warning
#> 324 995 1 warning
#> 325 996 0 warning
#> 326 997 1 warning
#> 327 998 1 warning
#> 328 999 0 warning
#> 329 1000 1 warning
# Detect drift using Page-Hinkley with custom parameters
results <- detect_drift(stream, method = "page_hinkley",
delta = 0.005, threshold = 50)
print(results)
#> index value type
#> 1 650 1 drift
# Detect drift using KSWIN
results <- detect_drift(stream, method = "kswin")
print(results)
#> index value type
#> 1 516 1 drift
#> 2 715 1 drift
# Get only drift detections, exclude warnings
results <- detect_drift(stream, method = "ddm", include_warnings = FALSE)
print(results)
#> index value type
#> 1 560 1 drift
