In accordance with the teachings described herein, systems and methods are provided for estimating quantiles for data stored in a distributed system. In one embodiment, an instruction is received to estimate a specified quantile for a variate in a set of data stored at a plurality of nodes in the distributed system. A plurality of data bins for the variate are defined that are each associated with a different range of data values in the set of data. Lower and upper quantile bounds for each of the plurality of data bins are determined based on the total number of data values that fall within each of the plurality of data bins. The specified quantile is estimated based on an identified one of the plurality of data bins that includes the specified quantile based on the lower and upper quantile bounds.
|
22. A non-transitory machine-readable storage medium comprising a computer-program product, including instructions configured to cause a data processing apparatus to:
receive an instruction to estimate a specified quantile for a variate in a set of data stored at a plurality of nodes in the distributed system;
identify a minimum data value and a maximum data value for the variate from the set of data;
define a plurality of data bins for the variate, wherein the plurality of data bins collectively range from the minimum data value to the maximum data value and each of the plurality of data bins is associated with a different range of data values in the set of data;
determine a total number of data values in the set of data that fall within each of the plurality of data bins;
determine lower and upper quantile bounds for each of the plurality of data bins based at least in part on the total number of data values that fall within each of the plurality of data bins;
identify one of the plurality of data bins that includes the specified quantile based on the lower and upper quantile bounds;
estimate the specified quantile based on the identified one of the plurality of data bins; and
store data including the estimated specified quantile and the upper and lower quantile bounds, wherein when another plurality of data bins is defined, the stored data is used to narrow one or more spans of lower and upper quantile bounds of the another plurality of data bins.
1. A computer-implemented method for estimating quantiles for data stored in a distributed system, comprising:
receiving an instruction to estimate a specified quantile for a variate in a set of data stored at a plurality of nodes in the distributed system;
identifying a minimum data value and a maximum data value for the variate from the set of data;
defining a plurality of data bins for the variate, wherein the plurality of data bins collectively range from the minimum data value to the maximum data value and each of the plurality of data bins is associated with a different range of data values in the set of data;
determining a total number of data values in the set of data that fall within each of the plurality of data bins;
determining lower and upper quantile bounds for each of the plurality of data bins based at least in part on the total number of data values that fall within each of the plurality of data bins;
identifying one of the plurality of data bins that includes the specified quantile based on the lower and upper quantile bounds;
estimating the specified quantile based on the identified one of the plurality of data bins; and
storing data including the estimated specified quantile and the upper and lower quantile bounds, wherein when another plurality of data bins is defined, the stored data is used to narrow one or more spans of lower and upper quantile bounds of the another plurality of data bins;
wherein the operations of the method are performed by one or more hardware processors in the distributed system.
12. A system for estimating quantiles for data stored in a distributed system, comprising:
a centralized node of the distributed system that includes one or more hardware processors and one or more computer readable mediums; and
a plurality of distributed nodes in the distributed system, each distributed node including one or more additional hardware processors and one or more additional computer readable mediums;
the centralized node configured to receive an instruction to estimate a specified quantile for a variate in a set of data stored at the plurality of distributed nodes;
the plurality of distributed nodes configured to identify a minimum data value and a maximum data value for the variate from the set of data;
the centralized node further configured to define a plurality of data bins for the variate, wherein the plurality of data bins collectively range from the minimum data value to the maximum data value and each of the plurality of data bins is associated with a different range of data values in the set of data;
the plurality of distributed nodes further configured to determine a total number of data values in the set of data that fall within each of the plurality of data bins;
the centralized node further configured to:
determine lower and upper quantile bounds for each of the plurality of data bins based on the total number of data values that fall within each of the plurality of data bins,
identify one of the plurality of data bins that includes the specified quantile based on the lower and upper quantile bounds,
estimate the specified quantile based on the identified one of the plurality of data bins; and
store data including the estimated specified quantile and the upper and lower quantile bounds, wherein when another plurality of data bins is defined, the stored data is used to narrow one or more spans of lower and upper quantile bounds of the another plurality of data bins.
2. The method of
determining a total minimum data value and a total maximum data value within each of the plurality of data bins;
wherein the one of the plurality of data bins that includes the specified quantile is identified based also on the total minimum data value and the total maximum data value in the one of the plurality of data bins.
3. The method of
determining a number of data values in each of the plurality of nodes that fall within each of the plurality of data bins;
determining a minimum and maximum data value in each of the plurality of nodes that fall within each of the plurality of data bins;
obtaining the number of data values in each of the plurality of nodes to determine the total number of data values that fall within each of the plurality of data bins;
obtaining the minimum data values from each of the plurality of nodes to determine the total minimum data value for each of the plurality of data bins; and
summing the maximum data values from each of the plurality of nodes to determine the total maximum data value for each of the plurality of data bins.
4. The method of
5. The method of
6. The method of
defining a second plurality of data bins, wherein each of the second plurality of data bins is associated with a different range of data values within the identified one of the plurality of data bins;
determining a total number of data values in the set of data that fall within each of the second plurality of data bins;
determining lower and upper quantile bounds for each of the second plurality of data bins based on the total number of data values that fall within each of the second plurality of data bins;
identifying one of the second plurality of data bins that includes the specified quantile based on the lower and upper quantile bounds for the second plurality of data bins; and
estimating the specified quantile based on the identified one of the second plurality of data bins.
7. The method of
repeating the operations of
8. The method of
9. The method of
10. The method of
11. The method of
13. The system of
determine a total minimum data value and a total maximum data value within each of the plurality of data bins; and
wherein the one of the plurality of data bins that includes the specified quantile is identified based also on the total minimum data value and the total maximum data value in the one of the plurality of data bins.
14. The system of
the plurality of distributed nodes are further configured to:
determine a number of data values in each of the plurality of nodes that fall within each of the plurality of data bins, and
determine a minimum and maximum data value in each of the plurality of nodes that fall within each of the plurality of data bins; and
the centralized node is further configured to:
sum the number of data values in each of the plurality of nodes to determine the total number of data values that fall within each of the plurality of data bins,
obtain the minimum data values from each of the plurality of nodes to determine the total minimum data value for each of the plurality of data bins, and
obtain the maximum data values from each of the plurality of nodes to determine the total maximum data value for each of the plurality of data bins.
15. The system of
16. The system of
17. The system of
the centralized node is further configured to define a second plurality of data bins, wherein each of the second plurality of data bins is associated with a different range of data values within the identified one of the plurality of data bins;
the plurality of distributed nodes are further configured to determine a total number of data values in the set of data that fall within each of the second plurality of data bins; and
the centralized node is further configured to:
determine lower and upper quantile bounds for each of the second plurality of data bins based on the total number of data values that fall within each of the second plurality of data bins,
identify one of the second plurality of data bins that includes the specified quantile based on the lower and upper quantile bounds for the second plurality of data bins, and
estimate the specified quantile based on the identified one of the second plurality of data bins.
18. The system of
19. The system of
20. The system of
21. The system of
23. The non-transitory machine-readable storage medium comprising the computer-program product of
determine a total minimum data value and a total maximum data value within each of the plurality of data bins;
wherein the one of the plurality of data bins that includes the specified quantile is identified based also on the total minimum data value and the total maximum data value in the one of the plurality of data bins.
24. The non-transitory machine-readable storage medium comprising the computer-program product of
determine a number of data values in each of the plurality of nodes that fall within each of the plurality of data bins;
determine a minimum and maximum data value in each of the plurality of nodes that fall within each of the plurality of data bins;
obtain the number of data values in each of the plurality of nodes to determine the total number of data values that fall within each of the plurality of data bins;
obtain the minimum data values from each of the plurality of nodes to determine the total minimum data value for each of the plurality of data bins; and
sum the maximum data values from each of the plurality of nodes to determine the total maximum data value for each of the plurality of data bins.
25. The non-transitory machine-readable storage medium comprising the computer-program product of
26. The non-transitory machine-readable storage medium comprising the computer-program product of
27. The non-transitory machine-readable storage medium comprising the computer-program product of
define a second plurality of data bins, wherein each of the second plurality of data bins is associated with a different range of data values within the identified one of the plurality of data bins;
determine a total number of data values in the set of data that fall within each of the second plurality of data bins;
determine lower and upper quantile bounds for each of the second plurality of data bins based on the total number of data values that fall within each of the second plurality of data bins;
identify one of the second plurality of data bins that includes the specified quantile based on the lower and upper quantile bounds for the second plurality of data bins; and
estimate the specified quantile based on the identified one of the second plurality of data bins.
28. The non-transitory machine-readable storage medium comprising the computer-program product of
repeat the instructions of
29. The non-transitory machine-readable storage medium comprising the computer-program product of
30. The non-transitory machine-readable storage medium comprising the computer-program product of
31. The non-transitory machine-readable storage medium comprising the computer-program product of
32. The non-transitory machine-readable storage medium comprising the computer-program product of
|
The technology described in this patent document relates generally to computer-implemented.
Quantiles are commonly used for various applications involving frequency data. Finding quantiles of a variate in small data sets is a relatively simple matter. As the number of observed values in the data set increases, however, the quantile problem becomes more difficult. Further complicating the problem is that large data sets are often stored in distributed systems in which different components (e.g., nodes) of the system have access to different portions of the data.
In accordance with the teachings described herein, systems and methods are provided for estimating quantiles for data stored in a distributed system. In one embodiment, an instruction is received to estimate a specified quantile for a variate in a set of data stored at a plurality of nodes in the distributed system. A minimum data value and a maximum data value for the variate are identified from the set of data. A plurality of data bins for the variate is defined, wherein the plurality of data bins collectively range from the minimum data value to the maximum data value and each of the plurality of data bins is associated with a different range of data values in the set of data. A total number of data values in the set of data that fall within each of the plurality of data bins is determined. Lower and upper quantile bounds for each of the plurality of data bins are determined based on the total number of data values that fall within each of the plurality of data bins. One of the plurality of data bins is identified that includes the specified quantile based on the lower and upper quantile bounds. The specified quantile is estimated based on the identified one of the plurality of data bins.
In operation, the quantile estimation engine 102 receives an instruction 108 that identifies a quantile to be estimated for a variate in a set of data stored in a plurality of files at separate nodes 104, 106 in the distributed system. The quantile estimation instruction 108 may, for example, be received from user input or from another software module in the system.
Upon receiving the quantile estimation instruction 108, the system 100 executes the processes depicted at 110-116 in
At 110, the system 100 performs a single pass through the set of data to determine the minimum and maximum values for the variate. At 111, the quantile estimation engine 102 defines a plurality of data bins for the variate. The data bins for a variate collectively range from the minimum data value to the maximum data value for the variate in the set of data, with each data bin being associated with a different range of data values in the set of data.
At 112, the system 100 performs another pass through the set of data to determine a count of the total number of data values for the variate that fall within each of the plurality of data bins. From the bin counts, the quantile estimation engine 102 determines, at 113, the upper and lower bounds on the percentages for each of the plurality of data bins. At 114, the quantile estimation engine 102 determines if one of the plurality of data bins has converged on the quantile specified in the quantile estimation instruction 108. For example, the quantile estimation engine 102 may be configured to estimate the quantile 118 to a predetermined level of precision. The level of precision may, for example, be based on the absolute error bound for quantiles in the bin. For instance, if the specified quantile is between the upper and lower quantile bounds for a bin and the absolute error (e.g., calculated as half the distance between the upper and lower bounds) is within the predetermined precision level, then the quantile estimation engine 102 may estimate the quantile 118 from the data values within the bin. For example, the quantile estimate 118 may be selected from a data value at the midpoint of the bin or as a weighted average of the data values in the bin.
If one of the plurality of data bins has not converged on the specified quantile, then, at 115, the quantile estimation engine 102 isolates one of the plurality of bins that includes the specified quantile. The method then returns to 111, where the quantile estimation engine 102 defines a new set of data bins that collectively range from the lower to upper quantile bounds of the isolated bin. The method then repeats steps 112 and 113 to make another pass through the data set with the redefined data bins. This process is repeated until a data bin converges on the specified quantile (possibly within a predetermined precision level), at which point the quantile estimate 118 is provided and the quantile estimation method ends at 116.
Upon receiving the quantile estimation instruction(s) 208, the system 200 executes the processes depicted at 210-218 in
At steps 210 and 211, the system 200 performs a single pass through the set(s) of data to determine the minimum and maximum values for each variate. At 210, each node 204, 206 that holds portions of the data for the identified variate(s) determines the maximum and minimum values of the variate(s) for its data and sends this information back to the quantile estimation engine 202. At 211, the quantile estimation engine 202 combines the data counts and minimum and maximum values from the distributed nodes 204, 206 to determine the counts, minimum and maximum values for the entire set(s) of data.
At 212, the quantile estimation engine 202 defines a plurality of data bins for each variate. The data bins for a variate collectively range from the minimum data value to the maximum data value for the set of data, with each data bin being associated with a different range of data values in the set of data. If the quantile estimation instructions 208 identify multiple variates and/or data sets, then a different plurality of data bins are defined for each variate and data set. In addition, if multiple quantiles are included in the quantile estimation instructions, then a different plurality of data bins may be defined for each quantile.
At steps 213 and 214, the system 200 performs another pass through the set(s) of data to determine the number of data values that fall within each of the plurality of data bins for each variate. At 213, each node 204, 206 performs frequency counts of the variate for its data and projects the frequency counts into each bin. If the quantile estimation instructions 208 identify multiple variates and/or data sets, then the nodes 204, 206 may perform frequency counts and obtain maximum and minimum values for each variate and/or data set during the same data pass. The nodes 204, 206 send the bin counts and minimum and maximum values to the quantile estimation engine 202 which, at 214, combines the bin counts from each of the nodes 204, 206 to determine the total bin counts for each variate. In addition, in this example, each node 204, 206 also identifies, at step 213, the minimum and maximum data values within each of the plurality of data bins for each variate and returns these minimum/maximum values to the quantile estimation engine 202, which combines the minima and maxima from each node 204, 206 at step 214. In this way, the combined minimum and maximum values for each bin may be used by the quantile estimation engine 202 to help identify the location of the desired quantile and potentially speed up the convergence process.
At 215, the quantile estimation engine 202 determines the upper and lower bounds on the percentages for each of the plurality of data bins based on the bin counts. The quantile estimation engine 202 may then determine, at 216, if one of the plurality of data bins has converged, to a predetermined precision level, on the quantile(s) specified in the quantile estimation instruction 208. As illustrated, the precision level necessary for convergence may, for example, be included in the quantile estimation instruction 208. If one of the plurality of data bins has not converged on the specified quantile(s), then, at 217, the quantile estimation engine 202 isolates one of the plurality of bins that includes the specified quantile(s), and returns to step 212 to define a new set of data bins that include the data values from the isolated bin. This process is repeated until a data bin converges on the specified quantile(s), at which point a quantile estimate 220 is determined from the data values in the bin, and the method ends at 218.
In operation, the system 300 depicted in
At steps 310 and 311, the system 300 performs a single pass through the set(s) of data to determine the minimum and maximum values for each variate, subject to any constraints identified in the quantile estimation instructions 302. Specifically, at 310, each node 306, 308 that holds portions of the data for the identified variate(s) determines the maximum and minimum values of the variate(s) for its data, subject to any constraints, and sends this information back to the quantile estimation engine 304. For example, if the quantile estimation instruction 302 includes a constraint that identifies a particular geographic region, then each node 306, 308 determines the minimum and maximum values of the variate(s) within its data that are associated with the identified geographic region. At 311, the quantile estimation engine 304 combines the data counts from the distributed nodes 306, 308 to determine the minimum and maximum values for the entire set(s) of data.
At 312, the quantile estimation engine 304 defines a grid size and distribution for a plurality of data bins for each variate. A grid for a set of data bins, as used herein, is the set of points that define the bounds of the data bins. That is, a set of data bins for a variate collectively include the data values between a minimum value and a maximum value. The set of points between the minimum and maximum values that define the bounds of each bin are referred to as the grid, where the grid size refers to the number of points in the grid and the grid distribution refers to where each of the set of grid points are located. (See, e.g., the examples described below with reference to
At steps 315 and 316, the system 300 performs another pass through the set(s) of data to determine the number of data values that fall within each of the plurality of data bins for each variate, along with the minimum and maximum data values within each bin. At 315, each node 306, 308 performs frequency counts of the variate and projects the frequency counts into each bin. Each node 306, 308 also determines the minimum and maximum data values in each of the plurality of bins for each variate. The nodes 306, 308 then send the bin counts and the minimum and maximum values to the quantile estimation engine 304, which combines them at 316 to determine total bin counts and minimum/maximum values for each variate
At 317, the quantile estimation engine 304 determines the upper and lower bounds on the percentages for each of the plurality of data bins based on the bin counts. The quantile estimation engine 304 may then determine, at 318, if one of the plurality of data bins has converged (e.g., to a predetermined precision level) on the specified quantile(s). If one of the plurality of data bins has not converged on the specified quantile(s), then, at 319, the quantile estimation engine 304 isolates one of the plurality of bins that includes the specified quantile(s), and returns to step 312 to define a new data grid that includes the data values from the isolated bin. This process is repeated until a data bin converges on the specified quantile(s), at which point a quantile estimate 330 is determined from the data values in the bin, and the method ends at 320.
In
In a second pass through the data, the distributed nodes (server 1 and server 2) perform a count of the number of data values and minimum and maximum values in each bin and return the results to the centralized node, as illustrated in columns 604 and 606. The centralized node then combines the results, as illustrated in column 608, and determines the quantile bounds for each bin, as shown in column 610.
From this information, the centralized node can determine that the desired 75% quantile must be included within Bin 3, which has a lower quantile bound of 74.07% and an upper bound of 85.5. If the data range within Bin 3 meets the desired level of precision, then a quantile estimate may be determine from the information shown in
In
It should be understood that there is a technicality involved with character data that isn't involved with numerical data. Depending on the number of datum, there may not be a datum for which 23% of the total data are less. Consider, for instance, the following example:
Data={1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, Desired quantile=23%.
In this data set, 20% of the data is less than or equal to 2, 30% of the data is less than or equal to 3. In practice, some systems report the 23% quantile to be 2, some report 3, some report the average 2.5, others report an interpolated value 2.3, and still others report some other interpolated number between 2 and 3.
Interpolation of character data typically does not give meaningful results. Instead, one or the two words adjacent to the desired percentile are reported. The character equivalent to the numerical example set forth above is:
Data={a, b, c, d, e, f, g, h, i, j}, Desired quantile=23%.
The answer to this example could be either ‘b’ or ‘c’.
To create the data bin boundaries for character data, a scheme may be used to interpolate character data. The bin boundaries will not be meaningful words under the interpolation scheme. However, the maximum and minimum words (alphabetically) may be stored for each bin.
In one example, to create the bin points for the character data each word may be mapped to an integer. This may be accomplished, for example, by locating the longest word in the data (in this case “establishment” with 13 letters) and consider each word as a number, in base 26, created by left justifying the word with a=0, b=1, c=2, . . . , z=25. This reduces the bin creating process to the same problem as the numerical examples.
To reduce the number of comparisons, a minimum number of alphabetic digits may be determined in order to arrive at a desired number of distinct bins. For instance, to provide 3 bin boundaries between ‘a’ and ‘witnesses’, bins are only necessary between ‘a’=0 and ‘w’=22. The 25% bin boundary would therefore be (22−0)*0.25=5.5 (between ‘f’ and ‘g’, which we can round to ‘g’); the 50% bin boundary would be (22−0)*0.5=11 (T), and the 75% bin boundary would be (22−0)*0.75=16.5 (between ‘q’ and ‘r’, which rounds to ‘r’). These resulting bins are illustrated in
In a second pass through the data, the distributed nodes (server 1 and server 2) perform a count of the number of data values in each bin along with the minimum and maximum data values, as shown in columns 812 and 814 of
In
In
In
This written description uses examples to disclose the invention, including the best mode, and also to enable a person skilled in the art to make and use the invention. The patentable scope of the invention may include other examples. Additionally, the methods and systems described herein may be implemented on many different types of processing devices by program code comprising program instructions that are executable by the device processing subsystem. The software program instructions may include source code, object code, machine code, or any other stored data that is operable to cause a processing system to perform the methods and operations described herein. Other implementations may also be used, however, such as firmware or even appropriately designed hardware configured to carry out the methods and systems described herein.
The systems' and methods' data (e.g., associations, mappings, data input, data output, intermediate data results, final data results, etc.) may be stored and implemented in one or more different types of computer-implemented data stores, such as different types of storage devices and programming constructs (e.g., RAM, ROM, Flash memory, flat files, databases, programming data structures, programming variables, IF-THEN (or similar type) statement constructs, etc.). It is noted that data structures describe formats for use in organizing and storing data in databases, programs, memory, or other computer-readable media for use by a computer program.
The computer components, software modules, functions, data stores and data structures described herein may be connected directly or indirectly to each other in order to allow the flow of data needed for their operations. It is also noted that a module or processor includes but is not limited to a unit of code that performs a software operation, and can be implemented for example as a subroutine unit of code, or as a software function unit of code, or as an object (as in an object-oriented paradigm), or as an applet, or in a computer script language, or as another type of computer code. The software components and/or functionality may be located on a single computer or distributed across multiple computers depending upon the situation at hand.
It should be understood that as used in the description herein and throughout the claims that follow, the meaning of “a,” “an,” and “the” includes plural reference unless the context clearly dictates otherwise. Also, as used in the description herein and throughout the claims that follow, the meaning of “in” includes “in” and “on” unless the context clearly dictates otherwise. Finally, as used in the description herein and throughout the claims that follow, the meanings of “and” and “or” include both the conjunctive and disjunctive and may be used interchangeably unless the context expressly dictates otherwise; the phrase “exclusive or” may be used to indicate situation where only the disjunctive meaning may apply.
Schabenberger, Oliver, Guirguis, Georges H., Pope, Scott
Patent | Priority | Assignee | Title |
10248476, | May 22 2017 | SAS Institute Inc.; SAS INSTITUTE INC | Efficient computations and network communications in a distributed computing environment |
10467293, | May 18 2017 | Aetna Inc. | Scalable distributed computing system for determining exact median and other quantiles in big data applications |
9507833, | May 29 2012 | SAS Institute Inc. | Systems and methods for quantile determination in a distributed data system |
9703852, | May 29 2012 | SAS Institute Inc. | Systems and methods for quantile determination in a distributed data system using sampling |
Patent | Priority | Assignee | Title |
5018088, | Oct 02 1989 | The Johns Hopkins University | Adaptive locally-optimum detection signal processor and processing methods |
5734744, | Jun 07 1995 | Pixar | Method and apparatus for compression and decompression of color data |
6985467, | Jun 30 1995 | InterDigital Technology Corporation | Rapid acquisition spreading codes for spread-spectrum communications |
7020111, | Jun 30 1995 | InterDigital Technology Corporation | System for using rapid acquisition spreading codes for spread-spectrum communications |
7162249, | Jun 30 2004 | Nokia Technologies Oy | Scheduling data transmission in a wireless communications network |
7219034, | Sep 13 2001 | RIVERBED TECHNOLOGY LLC | System and methods for display of time-series data distribution |
7409357, | Dec 20 2002 | Accenture Global Services Limited | Quantification of operational risks |
8611586, | Nov 19 2010 | Harris Corporation | Fast target extraction from thermal imagery |
8868573, | Feb 17 2012 | International Business Machines Corporation | Computing and applying order statistics for data preparation |
20030088542, | |||
20030118232, | |||
20060002364, | |||
20090222243, | |||
20100292995, | |||
20130218908, | |||
20130218909, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
May 24 2012 | POPE, SCOTT | SAS INSTITUTE INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 028284 | /0859 | |
May 24 2012 | GUIRGUIS, GEORGES H | SAS INSTITUTE INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 028284 | /0859 | |
May 24 2012 | SCHABENBERGER, OLIVER | SAS INSTITUTE INC | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 028284 | /0859 | |
May 29 2012 | SAS Institute Inc. | (assignment on the face of the patent) | / |
Date | Maintenance Fee Events |
Aug 14 2019 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Aug 08 2023 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Date | Maintenance Schedule |
Feb 23 2019 | 4 years fee payment window open |
Aug 23 2019 | 6 months grace period start (w surcharge) |
Feb 23 2020 | patent expiry (for year 4) |
Feb 23 2022 | 2 years to revive unintentionally abandoned end. (for year 4) |
Feb 23 2023 | 8 years fee payment window open |
Aug 23 2023 | 6 months grace period start (w surcharge) |
Feb 23 2024 | patent expiry (for year 8) |
Feb 23 2026 | 2 years to revive unintentionally abandoned end. (for year 8) |
Feb 23 2027 | 12 years fee payment window open |
Aug 23 2027 | 6 months grace period start (w surcharge) |
Feb 23 2028 | patent expiry (for year 12) |
Feb 23 2030 | 2 years to revive unintentionally abandoned end. (for year 12) |