Recent Releases of https://github.com/quatrope/scikit-criteria
https://github.com/quatrope/scikit-criteria - 0.9
Version 0.9
New Features
New MCDA Methods: The library has been expanded with a dozen new aggregation methods, offering a wider range of tools for decision analysis:
- ARAS: Additive Ratio Assessment.
- COCOSO: Combined Compromise Solution.
- EDAS: Evaluation based on Distance from Average Solution.
- ERVD: Evaluation based on Reference Vector-Distance.
- MABAC: Multi-Attributive Border Approximation area Comparison.
- OCRA: Operational Competitiveness Rating Analysis.
- PROBID: Probabilistic Omsi-based method for criterion weighting.
- RAM: Range of Value Method.
- RIM: Reference Ideal Method.
- SPOTIS: Stable Preference Ordering Towards Ideal Solution.
- WASPAS: Weighted Aggregated Sum Product Assessment.
New Criteria Inverters: The
- MinMaxInverter: A new inverter that normalizes all criteria to the [0,1] range and inverts minimization criteria to maximization. This is particularly useful for MCDA methods that require all criteria to have the same optimization direction and comparable scales.
- BenefitCostInverter: A new inverter that uses ratios based on the criterion type. For benefit criteria, values are normalized by dividing by the maximum value of the criterion. For cost criteria, the minimum value of the criterion is divided by the value of the criterion
New Criteria Weighers: New methods have been added to objectively calculate criteria weights:
- MEREC: Method based on the Removal Effects of Criteria.
- Gini: A weighter based on the Gini coefficient.
Rank Reversal Evaluators: Two new classes have been introduced to analyze ranking stability:
-
RankInvariantChecker: Evaluates ranking consistency when one or more alternatives are removed (Test 1 of: Wang, X., & Triantaphyllou, E. (2008). Ranking irregularities when evaluating alternatives by using some ELECTRE methods. Omega, 36(1), 45-63. https://doi.org/10.1016/j.omega.2005.12.003). -
RankTransitivityChecker: Analyzes ranking transitivity by comparing results with subsets of alternatives (Test 2 and 3 of: Wang, X., & Triantaphyllou, E. (2008). Ranking irregularities when evaluating alternatives by using some ELECTRE methods. Omega, 36(1), 45-63. https://doi.org/10.1016/j.omega.2005.12.003)
-
Combinatorial Pipelines: The
CombinatorialPipelineclass has been added, a powerful tool that allows for the creation and exhaustive evaluation of all possible combinations of transformers and aggregation methods, facilitating multiple scalers and other kinds of analyses.LaTeX Export: The
DecisionMatrixclass now features ato_latex()method for easily exporting the decision matrix to a LaTeX table format.Dominance Graph Cycle Detection: A
has_loops()method has been added to theDecisionMatrixclass, which uses thenetworkxlibrary to detect inconsistencies (cycles) in dominance relationships.
Improvements and Behavioral Changes
-
PushNegativesFix: A bug in thePushNegativestransformer has been resolved. It now correctly shifts all matrix values so that the minimum value is zero. -
ELECTRE2Fix: An error in the calculation of the "weak kernel" inELECTRE2has been corrected, ensuring the results align with the method's literature. - Import Performance Improvement: An on-demand import mechanism has been implemented, reducing the library's initial loading time.
- Python 3.12 and 3.13 Support: Compatibility has been added for the latest Python versions.
- Dependency Updates: The required versions of
NumPy(to 2.0),NetworkX(to 3.2), andscikit-learn(to 1.6) have been updated.
API Changes (Breaking Changes)
- New
replace()Method: Areplace()method has been introduced inDecisionMatrixand all method classes (SKCMethodABC) as the recommended way to create copies with modified parameters. Usingcopy(**kwargs)for this purpose is now deprecated. - Module Restructuring:
- The
skcriteria.agg.similaritymodule has been renamed toskcriteria.agg.topsis. - The
skcriteria.pipelinemodule has been restructured into a package (skcriteria.pipelines), and the main class is nowskcriteria.pipelines.simple_pipeline.SimplePipeline.
- The
- Name Changes for Consistency:
- The
Electre2class has been renamed toELECTRE2. - The
TieBreakerclass has been renamed toFallbackTieBreaker.
- The
- Python
Published by leliel12 7 months ago
https://github.com/quatrope/scikit-criteria - 0.9.dev0
Version 0.9.dev0
New Features
New MCDA Methods: The library has been expanded with a dozen new aggregation methods, offering a wider range of tools for decision analysis:
- ARAS: Additive Ratio Assessment.
- COCOSO: Combined Compromise Solution.
- EDAS: Evaluation based on Distance from Average Solution.
- ERVD: Evaluation based on Reference Vector-Distance.
- MABAC: Multi-Attributive Border Approximation area Comparison.
- OCRA: Operational Competitiveness Rating Analysis.
- PROBID: Probabilistic Omsi-based method for criterion weighting.
- RAM: Range of Value Method.
- RIM: Reference Ideal Method.
- SPOTIS: Stable Preference Ordering Towards Ideal Solution.
- WASPAS: Weighted Aggregated Sum Product Assessment.
New Criteria Inverters: The
- MinMaxInverter: A new inverter that normalizes all criteria to the [0,1] range and inverts minimization criteria to maximization. This is particularly useful for MCDA methods that require all criteria to have the same optimization direction and comparable scales.
- BenefitCostInverter: A new inverter that uses ratios based on the criterion type. For benefit criteria, values are normalized by dividing by the maximum value of the criterion. For cost criteria, the minimum value of the criterion is divided by the value of the criterion
New Criteria Weighers: New methods have been added to objectively calculate criteria weights:
- MEREC: Method based on the Removal Effects of Criteria.
- Gini: A weighter based on the Gini coefficient.
Rank Reversal Evaluators: Two new classes have been introduced to analyze ranking stability:
-
RankInvariantChecker: Evaluates ranking consistency when one or more alternatives are removed (Test 1 of: Wang, X., & Triantaphyllou, E. (2008). Ranking irregularities when evaluating alternatives by using some ELECTRE methods. Omega, 36(1), 45-63. https://doi.org/10.1016/j.omega.2005.12.003). -
RankTransitivityChecker: Analyzes ranking transitivity by comparing results with subsets of alternatives (Test 2 and 3 of: Wang, X., & Triantaphyllou, E. (2008). Ranking irregularities when evaluating alternatives by using some ELECTRE methods. Omega, 36(1), 45-63. https://doi.org/10.1016/j.omega.2005.12.003)
-
Combinatorial Pipelines: The
CombinatorialPipelineclass has been added, a powerful tool that allows for the creation and exhaustive evaluation of all possible combinations of transformers and aggregation methods, facilitating multiple scalers and other kinds of analyses.LaTeX Export: The
DecisionMatrixclass now features ato_latex()method for easily exporting the decision matrix to a LaTeX table format.Dominance Graph Cycle Detection: A
has_loops()method has been added to theDecisionMatrixclass, which uses thenetworkxlibrary to detect inconsistencies (cycles) in dominance relationships.
Improvements and Behavioral Changes
-
PushNegativesFix: A bug in thePushNegativestransformer has been resolved. It now correctly shifts all matrix values so that the minimum value is zero. -
ELECTRE2Fix: An error in the calculation of the "weak kernel" inELECTRE2has been corrected, ensuring the results align with the method's literature. - Import Performance Improvement: An on-demand import mechanism has been implemented, reducing the library's initial loading time.
- Python 3.12 and 3.13 Support: Compatibility has been added for the latest Python versions.
- Dependency Updates: The required versions of
NumPy(to 2.0),NetworkX(to 3.2), andscikit-learn(to 1.6) have been updated.
API Changes (Breaking Changes)
- New
replace()Method: Areplace()method has been introduced inDecisionMatrixand all method classes (SKCMethodABC) as the recommended way to create copies with modified parameters. Usingcopy(**kwargs)for this purpose is now deprecated. - Module Restructuring:
- The
skcriteria.agg.similaritymodule has been renamed toskcriteria.agg.topsis. - The
skcriteria.pipelinemodule has been restructured into a package (skcriteria.pipelines), and the main class is nowskcriteria.pipelines.simple_pipeline.SimplePipeline.
- The
- Name Changes for Consistency:
- The
Electre2class has been renamed toELECTRE2. - The
TieBreakerclass has been renamed toFallbackTieBreaker.
- The
- Python
Published by leliel12 7 months ago
https://github.com/quatrope/scikit-criteria - 0.8.7
Version 0.8.7
New Added functionality for user extension of scikit-criteria with decorators for creating aggregation and transformation models using functions.
```python
from skcriteria.extend import mkagg, mktransformer
@mkagg def MyAgg(**kwargs): # Implementation of the aggregation function
@mkagg(foo=1) def MyAggWithHyperparam(**kwargs): # Implementation of the aggregation function with # hyperparameter 'foo'
@mktransformer def MyTransformer(**kwargs): # Implementation of the transformation function
@mktransformer(bar=2) def MyTransformerWithHyperparam(**kwargs): # Implementation of the transformation function with # hyperparameter 'bar' ```
These decorators enable the creation of aggregation and transformation classes based on provided functions, allowing users to define decision-making models with less flexibility than traditional inheritance-based models.
For more information check the tutorial Extending Aggregation and Transformation Functions
- New Module: Introduced the
skcriteria.testingmodule, exposing utility functions for for comparing objects created in Scikit-Criteria in a testing environment. These functions facilitate the comparison of instances of theDecisionMatrix,ResultABC, andRanksComparatorclasses.
The assertion functions utilize pandas and numpy testing utilities for comparing matrices, series, and other attributes.
Check the Reference for more information.
New The API of the agg, pipeline, preprocessing, and extend modules has been cleaned up to prevent autocompletion with imports from other modules. The imported modules are still present, but they are excluded when attempting to autocomplete. This functionality is achieved thanks to the context manager
skcriteria.utils.cmanagers.hidden().New All methods (agg and transformers) has a new
get_method_nameinstance method.Drop Drop support for Python 3.8
- Python
Published by leliel12 about 2 years ago
https://github.com/quatrope/scikit-criteria - 0.8.7.dev1
Version 0.8.7.dev1
New Added functionality for user extension of scikit-criteria with decorators for creating aggregation and transformation models using functions.
```python
from skcriteria.extend import mkagg, mktransformer
@mkagg def MyAgg(**kwargs): # Implementation of the aggregation function
@mkagg(foo=1) def MyAggWithHyperparam(**kwargs): # Implementation of the aggregation function with # hyperparameter 'foo'
@mktransformer def MyTransformer(**kwargs): # Implementation of the transformation function
@mktransformer(bar=2) def MyTransformerWithHyperparam(**kwargs): # Implementation of the transformation function with # hyperparameter 'bar' ```
These decorators enable the creation of aggregation and transformation classes based on provided functions, allowing users to define decision-making models with less flexibility than traditional inheritance-based models.
For more information check the tutorial Extending Aggregation and Transformation Functions
New Module: Introduced the
skcriteria.testingmodule, exposing utility functions for for comparing objects created in Scikit-Criteria in a testing environment. These functions facilitate the comparison of instances of theDecisionMatrix,ResultABC, andRanksComparatorclasses.
The assertion functions utilize pandas and numpy testing utilities for comparing matrices, series, and other attributes.
Check the Reference for more information.
New The API of the agg, pipeline, preprocessing, and extend modules has been cleaned up to prevent autocompletion with imports from other modules. The imported modules are still present, but they are excluded when attempting to autocomplete. This functionality is achieved thanks to the context manager
skcriteria.utils.cmanagers.hidden().New All methods (agg and transformers) has a new
get_method_nameinstance method.Drop Drop support for Python 3.8
- Python
Published by leliel12 about 2 years ago
https://github.com/quatrope/scikit-criteria - 0.8.7.dev0
Version 0.8.7.dev0
New Added functionality for user extension of scikit-criteria with decorators for creating aggregation and transformation models using functions.
```python
from skcriteria.extend import mkagg, mktransformer
@mkagg def MyAgg(**kwargs): # Implementation of the aggregation function
@mkagg(foo=1) def MyAggWithHyperparam(**kwargs): # Implementation of the aggregation function with # hyperparameter 'foo'
@mktransformer def MyTransformer(**kwargs): # Implementation of the transformation function
@mktransformer(bar=2) def MyTransformerWithHyperparam(**kwargs): # Implementation of the transformation function with # hyperparameter 'bar' ```
These decorators enable the creation of aggregation and transformation classes based on provided functions, allowing users to define decision-making models with less flexibility than traditional inheritance-based models.
For more information check the tutorial Extending Aggregation and Transformation Functions
New Module: Introduced the
skcriteria.testingmodule, exposing utility functions for for comparing objects created in Scikit-Criteria in a testing environment. These functions facilitate the comparison of instances of theDecisionMatrix,ResultABC, andRanksComparatorclasses.
The assertion functions utilize pandas and numpy testing utilities for comparing matrices, series, and other attributes.
Check the Reference for more information.
New The API of the agg, pipeline, preprocessing, and extend modules has been cleaned up to prevent autocompletion with imports from other modules. The imported modules are still present, but they are excluded when attempting to autocomplete. This functionality is achieved thanks to the context manager
skcriteria.utils.cmanagers.hidden().New All methods (agg and transformers) has a new
get_method_nameinstance method.Drop Drop support for Python 3.8
- Python
Published by leliel12 about 2 years ago
https://github.com/quatrope/scikit-criteria - 0.8.6
Version 0.8.6
New Rank reversal 1 implementhed in the
RankInvariantCheckerclass```python
import skcriteria as skc from skcriteria.cmp import RankInvariantChecker from skcriteria.agg.similarity import TOPSIS
dm = skc.datasets.load_van2021evaluation() rrt1 = RankInvariantChecker(TOPSIS()) rrt1.evaluate(dm)
`````` New The module
skcriteria.madmwas deprecated in favor ofskcriteria.aggAdd support for Python 3.11.
Removed Python 3.7. Google collab now work with 3.8.
Updated Scikit-Learn to 1.3.x.
Now all cached methods and properties are stored inside the instance. Previously this was stored inside the class generating a memoryleak.
- Python
Published by leliel12 over 2 years ago
https://github.com/quatrope/scikit-criteria - 0.8.5
Version 0.8.5
New Rank reversal 1 implementhed in the
RankInvariantCheckerclass```python
import skcriteria as skc from skcriteria.cmp import RankInvariantChecker from skcriteria.agg.similarity import TOPSIS
dm = skc.datasets.load_van2021evaluation() rrt1 = RankInvariantChecker(TOPSIS()) rrt1.evaluate(dm)
`````` New The module
skcriteria.madmwas deprecated in favor ofskcriteria.aggAdd support for Python 3.11.
Removed Python 3.7. Google collab now work with 3.8.
Updated Scikit-Learn to 1.3.x.
Now all cached methods and properties are stored inside the instance. Previously this was stored inside the class generating a memoryleak.
- Python
Published by leliel12 over 2 years ago
https://github.com/quatrope/scikit-criteria - 0.8.3
Fixed a bug detected on the EntropyWeighted, Now works as the literature specifies
- Python
Published by leliel12 over 3 years ago
https://github.com/quatrope/scikit-criteria - 0.8.2
- We bring back Python 3.7 because is the version used in google.colab.
- Bugfixes in
plot.frontieranddominance.eq.
- Python
Published by leliel12 over 3 years ago
https://github.com/quatrope/scikit-criteria - 0.8.2.dev0
- Python
Published by leliel12 over 3 years ago
https://github.com/quatrope/scikit-criteria - 0.8.1
Add pyproject.toml to MANIFEST.in this is needed for conda-forge
- Python
Published by leliel12 over 3 years ago
https://github.com/quatrope/scikit-criteria - 0.8
Version 0.8
New The
skcriteria.cmppackage utilities to compare rankings.New The new package
skcriteria.datasetsinclude two datasets (one a toy and one real) to quickly start your experiments.New DecisionMatrix now can be sliced with a syntax similar of the pandas.DataFrame.
dm["c0"]cut the $c0$ criteria.dm[["c0", "c2"]cut the criteria $c0$ and $c2$.dm.loc["a0"]cut the alternative $a0$.dm.loc[["a0", "a1"]]cut the alternatives $a0$ and $a1$.dm.iloc[0:3]cuts from the first to the third alternative.
New imputation methods for replacing missing data with substituted values. These methods are in the module
skcriteria.preprocessing.impute.New results object now has a
to_seriesmethod.Changed Behaviour: The ranks and kernels
equalsare now calledvalues_equals. The newaequalssupport tolerances to compare numpy arrays internally stored inextra_, and theequalsmethod is equivalent toaequals(rtol=0, atol=0).We detected a bad behavior in ELECTRE2, so we decided to launch a
FutureWarningwhen the class is instantiated. In the version after 0.8, a new implementation of ELECTRE2 will be provided.Multiple
__repr__was improved to folow the Python recomendationCriticweighter was renamed toCRITIC(all capitals) to be consistent with the literature. The old class is still there but is deprecated.All the functions and classes of
skcriteria.preprocessing.distancewas moved toskcriteria.preprocessing.scalers.The
StdWeighternow uses the sample standar-deviation. From the numerical point of view, this does not generate any change, since the deviations are scaled by the sum. Computationally speaking there may be some difference from the ~5th decimal digit onwards.Two method of the
Objectiveenum was deprecated and replaced:Objective.construct_from_alias()->Objective.from_alias()(classmethod)Objective.to_string()->Objective.to_symbol()'
The deprecated methods will be removed in version 1.0.
Add a dominance plot
DecisionMatrix.plot.dominance().WeightedSumModelraises aValueErrorwhen some value $< 0$.Moved internal modules
skcriteria.core.methods.SKCTransformerABC->skcriteria.preprocessing.SKCTransformerABCskcriteria.core.methods.SKCMatrixAndWeightTransformerABC->skcriteria.preprocessing.SKCMatrixAndWeightTransformerABC
- Python
Published by leliel12 over 3 years ago
https://github.com/quatrope/scikit-criteria - 0.8.dev0
preview of the 0.8 version
- Python
Published by leliel12 over 3 years ago
https://github.com/quatrope/scikit-criteria - 0.7
Version 0.7
- New method:
ELECTRE2. - New preprocessin strategy: A new way to transform from minimization to
maximization criteria:
NegateMinimize()which reverses the sign of the values of the criteria to be minimized (useful for not breaking distance relations in methods like TOPSIS). Additionally the previous we rename theMinimizeToMaximize()transformer toInvertMinimize(). Now the
RankingResult, support repeated/tied rankings and some were implemented to deal with these cases.RankingResult.has_ties_to see if there are tied values.RankingResult.ties_to see how often values are repeated.RankingResult.untided_rank_to get a ranking with no repeated values. repeated values.
KernelResultnow implements several new properties:kernel_alternatives_to know which alternatives are in the kernel.kernel_size_to know the number of alternatives in the kernel.kernel_where_was replaced bykernel_where_to standardize the api.
What's Changed (auto created)
- Dev 0.7 by @leliel12 in https://github.com/quatrope/scikit-criteria/pull/37 Full Changelog: https://github.com/quatrope/scikit-criteria/compare/0.6...0.7
- Python
Published by leliel12 almost 4 years ago
https://github.com/quatrope/scikit-criteria - 0.6
- Support for Python 3.10.
- All the objects of the project are now immutable by design, and can only
be mutated troughs the
object.copy()method. - Dominance analysis tools (
DecisionMatrix.dominance). - The method
DecisionMatrix.describe()was deprecated and will be removed in version 1.0. - New statistics functionalities
DecisionMatrix.statsaccessor. The accessors are now cached in the
DecisionMatrix.Tutorial for dominance and satisfaction analysis.
TOPSIS now support hyper-parameters to select different metrics.
Generalize the idea of accessors in scikit-criteria througth a common framework (
skcriteria.utils.accabcmodule).New deprecation mechanism through the
skcriteria.utils.decorators.deprecateddecorator.
- Python
Published by leliel12 about 4 years ago
https://github.com/quatrope/scikit-criteria - 0.6.dev0
First version of 0.6
What's Changed
- Leliel12/issue21 by @leliel12 in https://github.com/quatrope/scikit-criteria/pull/32
- Leliel12/issue24 by @leliel12 in https://github.com/quatrope/scikit-criteria/pull/33
- Issue23 by @leliel12 in https://github.com/quatrope/scikit-criteria/pull/34
- Dev by @leliel12 in https://github.com/quatrope/scikit-criteria/pull/35
New Contributors
- @leliel12 made their first contribution in https://github.com/quatrope/scikit-criteria/pull/32
Full Changelog: https://github.com/quatrope/scikit-criteria/compare/0.5...0.6.dev0
- Python
Published by leliel12 about 4 years ago
https://github.com/quatrope/scikit-criteria - Scikit-Criteria Next! 0.5
In this version scikit-criteria was rewritten from scratch. Among other things:
- The model implementation API was simplified.
- The
Dataobject was removed in favor ofDecisionMatrixwhich implements many more useful features for MCDA. - Plots were completely re-implemented using Seaborn.
- Coverage was increased to 100%.
- Pipelines concept was added (Thanks to Scikit-learn).
- New documentation. The quick start is totally rewritten!
Full Changelog: https://github.com/quatrope/scikit-criteria/commits/0.5
- Python
Published by leliel12 about 4 years ago
https://github.com/quatrope/scikit-criteria - Total rewrite of Scikit-Criteria
In this version scikit-criteria was rewritten from scratch. Among other things:
- The model implementation API was simplified.
- The
Dataobject was removed in favor ofDecisionMatrixwhich implements many more useful features for MCDA. - Plots were completely re-implemented using Seaborn.
- Coverage was increased to 100%.
- Pipelines concept was added (Thanks to Scikit-learn).
Full Changelog: https://github.com/quatrope/scikit-criteria/commits/0.5.dev0
- Python
Published by leliel12 about 4 years ago