Metadata-Version: 2.1
Name: scalg
Version: 0.1.5.3
Summary: A Python list scoring algorithm. Analyse data file using a range based procentual proximity algorithm and calculate the linear maximum likelihood.
Home-page: https://github.com/markmelnic/scalg
Author: Mark Melnic
Author-email: me@markmelnic.com
License: MIT
Classifier: Intended Audience :: Developers
Classifier: Natural Language :: English
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.6
Classifier: Programming Language :: Python :: 3.7
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Requires-Python: ==3.*
Description-Content-Type: text/markdown
License-File: LICENSE


# Scoring Algorithm (SCALG)

This algorithm works based on a percentual range proximity principle. Initially it was developed for a personal project, however later I found out it is a form of Newton's method used in statistics to solve maximum likelihood equations.

## Usage

    pip install scalg

As of __15 september 2020__ it contains two methods (`score` and `score_columns`) which will be described and demonstrated in the examples below.

    import scalg

## Examples

This will be the sample dataset used as source_data withing the examples with the corresponding indexes and column weights.

    Columns ->  0     1      2      3
    Weights ->  1     0      0      1
            1[[2016 ,21999 ,62000  ,181],
    Sets -> 2 [2013 ,21540 ,89000  ,223],
            3 [2015 ,18900 ,100000 ,223],
            4 [2013 ,24200 ,115527 ,223],
            5 [2016 ,24990 ,47300  ,223]]

### Score Method

The output if you pass in source_data and weights:

`scalg.score(source_data, [1, 0, 0, 1])`

    [[2016, 21999, 62000,  181, 2.2756757812463335],
     [2013, 21540, 89000,  223, 1.9553074815952338],
     [2015, 18900, 100000, 223, 2.894245191297678],
     [2013, 24200, 115527, 223, 1.1297208538587848],
     [2016, 24990, 47300,  223, 3.0]]

The output if you pass in source_data, weights and get_scores=True:

`scalg.score(source_data, [1, 0, 0, 1], get_scores=True)`

    [2.2756757812463335, 1.9553074815952338, 2. 894245191297678, 1.1297208538587848, 3.0]

The output if you pass in source_data, weights and get_score_lists=True:

`scalg.score(source_data, [1, 0, 0, 1], get_score_lists=True)`

    [[1.0                 ,0.0, 0.6666666666666666 ,0.0                      ,1.0]
     [0.49113300492610834 ,0.5665024630541872      ,1.0, 0.12972085385878485 ,0.0]
     [0.7845427763202251  ,0.38880501854104677     ,0.22757852463101114      ,0.0]
     [0.0                 ,1.0                     ,1.0                      ,1.0]]

This gives out the score of each element in the list compared to other elements, keeping it's position.

### Score Columns Method

Here you may use the same weights which you would use in `scalg.score`, or you may specify the weights of each column in the corresponding order. In this example using the weights argument `[1, 0, 0, 1]` or `[0, 1]` would make no difference.

The output if you pass in source_data, columns and weights:

`scalg.score_columns(source_data, [0, 1], [1, 0, 0, 1])`

     Scored columns            Scores for corresponding columns
       0|    1|                  |
    [[2016 ,21999 ,62000  ,181 ,1.4911330049261085],
     [2013 ,21540 ,89000  ,223 ,0.5665024630541872],
     [2015 ,18900 ,100000 ,223 ,1.6666666666666665],
     [2013 ,24200 ,115527 ,223 ,0.12972085385878485],
     [2016 ,24990 ,47300  ,223 ,1.0]]

The score was computed only based on columns 0 and 1.
