gooder-ai


Namegooder-ai JSON
Version 1.2.6 PyPI version JSON
download
home_pageNone
SummaryNone
upload_time2025-04-18 07:20:38
maintainerNone
docs_urlNone
authorEric Siegel
requires_python<4.0,>=3.11
licenseNone
keywords mlvaluation modelvaluation ml valuation model valuation
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Gooder AI Package

This package provides a streamlined way to ~evaluate~ valuate machine learning models on the **Gooder AI platform**. It exports a simple yet powerful function, **`valuate_model`**, which is designed to work with **scikit-learn-like models** and:

- **Authenticates** users with [Gooder.ai](https://latest.gooder.ai).  
- **Validates and uploads** model configuration and dataset for secure storage and processing.
- **Creates or updates** a shared "view" on [Gooder.ai](https://latest.gooder.ai), allowing users to interactively visualize and analyze their model performance.

## Installation
Install the package using pip:

```bash
pip install gooder_ai
```

## Usage

Here's an example invocation of the `valuate_model` function:

```python
import numpy as np
from some_ml_library import SomeModel  # Replace with an actual ML model library
import asyncio

# Define a dummy scikit-learn-like model
class DummyModel:
    def predict_proba(self, X):
        return np.random.rand(len(X), 2)  # Simulate probabilities for 2 classes
    
    classes_ = np.array([0, 1])  # Define class labels

# Instantiate the model
model = DummyModel()

# Create dummy dataset
x_data = np.random.rand(100, 5)  # 100 samples, 5 features
y = np.random.randint(0, 2, 100)  # Binary classification labels (0 or 1)

# Authentication credentials (optional)
auth_credentials = {
    "email": "user@example.com",
    "password": "securepassword123"
}

# Configuration dictionary
config = {
    "param1": "value1",
    "param2": "value2"
}

# View metadata
view_meta = {
    "mode": "public",
    "dataset_name": "test_dataset"
}

# Column names (optional)
column_names = {
    "dataset_column_names": ["feature1", "feature2", "feature3", "feature4", "feature5"],
    "score_column_names": ["prob_class_0", "prob_class_1"],
    "dependent_variable_name": "target"
}

# AWS variables (optional)
aws_variables = {
    "api_url": "https://api.gooder.ai",
    "bucket_name": "gooder-ai-bucket"
}

# Model names (optional)
model_names = ["model1", "model2"]

# Run the async function
output = asyncio.run(valuate_model(
    models=[model],
    x_data=x_data,
    y=y,
    auth_credentials=auth_credentials,
    config=config,
    view_meta=view_meta,
    model_names=model_names,
    column_names=column_names,
    aws_variables=aws_variables,
    max_size_uploaded_data=10,  # Limit uploaded data to 10MB
    max_size_saved_data=1000     # Limit saved data to 1000MB
))

print(output)  # Output: {'view_id': 'some-id', 'view_url': 'https://gooder.ai/some-id'}
```

## Function Parameters

### `valuate_model(**kwargs)`
The `valuate_model` function takes the following input arguments:

1. **`models: list[ScikitModel]`**  
   - Machine learning models that follow the `ScikitModel` protocol.  
   - It must have a scoring function (e.g., `predict_proba`), which is used to generate probability scores for classification.  
   - It must also have a `classes_` attribute, representing the possible target classes.

2. **`x_data: ndarray | DataFrame | list[str | int | float] | spmatrix`**  
   - A dataset containing the input features for evaluation.  
   - This is the dataset that will be fed into the model for prediction.

3. **`y: ndarray | DataFrame | list[str | int | float] | spmatrix`**  
   - A dataset representing the true target values (labels) corresponding to `x_data`.  
   - This helps in validating model performance.

4. **`auth_credentials: Credentials`**  
   - A dictionary with user authentication details for the Gooder AI platform.  
   - Structure:
     ```python
     {
         "email": str,  # User's email
         "password": str  # User's password
     }
     ```
   - These credentials are used for authentication to upload the dataset and configuration. It is optional if `upload_data_to_gooder = False` and `upload_config_to_gooder = False`.

5. **`config: dict`**  
   - A dictionary containing model configuration settings.  
   - This is validated against Gooder AI's schema before being uploaded.

6. **`view_meta: ViewMeta`**  
   - A dictionary containing metadata about the "view" (shared result visualization) being created or updated.  
   - Structure:
     ```python
     {
         "mode": Optional["public" | "protected" | "private"],  # Access control
         "view_id": Optional[str],  # ID of an existing view (if updating)
         "dataset_name": Optional[str]  # Name of the dataset (defaults to timestamp)
     }
     ```
   - If `view_id` is provided, an existing view is updated; otherwise, a new one is created.

7. **`column_names: ColumnNames = {}`** *(optional)*  
   - A dictionary specifying the column names for the dataset and scores.  
   - Structure:
     ```python
     {
         "dataset_column_names": Optional[list[str]],  # Feature names
         "score_column_names": Optional[list[str]],  # Column names for model scores
         "dependent_variable_name": Optional[str]  # Name of the target variable
     }
     ```

8. **`included_columns: list[str] = []`** *(optional)*  
   - A list of names specifying which columns to include in the dataset before visualizing the scores on the Gooder platform.  

9. **`aws_variables: AWSVariables = {}`** *(optional)*  
   - A dictionary containing AWS-related variables. 
   - Used for authentication and file uploads.
   - Structure:
     ```python
     {
         "api_url": Optional[str],
         "app_client_id": Optional[str],
         "identity_pool_id": Optional[str],
         "user_pool_id": Optional[str],
         "bucket_name": Optional[str],
         "base_url": Optional[str],
         "validation_api_url": Optional[str]
     }
     ```
   - Defaults to global values if not provided.

10. **`model_names: list[str]`**
   - This property is used to label the score columns in the output dataset and configuration.
   - If not provided default names are generated based on model class names.
   - Example: For a model that outputs binary classification scores, a column named "model1_score, model2_score" will be created.

11. **`max_size_uploaded_data: int = 10`** *(optional)* 
   - Defines the maximum allowed memory size (in megabytes, MB) for the combined dataset when uploading to Gooder AI.
   - Before uploading, the function calculates the memory usage of the full dataset.
   - If the dataset exceeds this threshold and `upload_data_to_gooder` is `True`, the operation is aborted and an exception is raised.
   - This is a safety limit to prevent large uploads that could impact performance or exceed platform limits.
   - Default value is 10MB, which is suitable for most use cases.
   - Increase this value if you need to work with larger datasets, but be aware of potential performance implications.

12. **`max_size_saved_data: int = 1000`** *(optional)* 
   - Defines the maximum allowed memory size (in megabytes, MB) for the combined dataset when saving locally.
   - Before saving, the function calculates the memory usage of the full dataset.
   - If the dataset exceeds this threshold and `upload_data_to_gooder` is `False`, the operation is aborted and an exception is raised.
   - This is a safety limit to prevent excessively large local files that could impact system performance.
   - Default value is 1000MB (approximately 1GB), which allows for much larger local datasets compared to uploads.
   - Increase this value if you need to work with very large datasets locally, but be aware of system memory constraints.

### Summary
- The function takes a **scikit-learn model**, **dataset**, **user credentials**, and **configuration details**.
- It authenticates with the Gooder AI platform, validates the config, and **uploads the dataset**.
- Then, it either **creates a new shared view or updates an existing one**.
- Finally, it **returns the view ID and URL**, allowing users to access model evaluation results.

## Config

# Chart Definition Configuration Example

Given below is an example chart/dashboard configuration for the Gooder AI app:

```typescript
const config = {
  "activeFilter": null, // Optional: ID of the active filter (default: null)
  "customChartLayoutMap": {
    "xl": [ // Layout for extra-large screens
      {
        "i": "d292c59c-e1f6-4f7e-ac53-525b7b6e6a56", // Chart ID
        "x": 0, // X position (grid units)
        "y": 0, // Y position (grid units)
        "w": 11, // Width (grid units)
        "h": 9, // Height (grid units)
        "moved": false, // Optional: Whether the item has been moved (default: false)
        "static": false // Optional: Whether the item is static (default: false)
      },
      // ... other xl layouts
    ],
    "lg": [ // Layout for large screens
      // ... similar structure as xl
    ],
    "md": [ // Layout for medium screens
      // ... similar structure as xl
    ],
    "sm": [ // Layout for small screens
      {
        "i": "2db67e79-3c40-40c5-ae42-7d426fa37597", // Chart ID
        "x": 0,
        "y": 36,
        "w": 12,
        "h": 12
      }
    ],
    "xs": [ // Layout for extra-small screens
      // ... similar structure as sm
    ]
  },
  "customCharts": [
    {
      "id": "74a92600-9334-4e57-afe5-2dbb61526547", // Required: Unique chart ID (UUID)
      "dataInitializationCode": "data init script", // Required: Script to initialize chart data
      "metricCalculationCode": "data calculate script", // Required: Script to calculate metrics
      "metric": "Num responses", // Required: Metric name (displayed on Y-axis)
      "title": "Response deciles", // Optional: Chart title (default: null)
      "resolution": 10, // Required: Number of data points/bins
      "unit": "none", // Required: Y-axis unit (from UnitTypes enum)
      "decimalPlaces": 2, // Optional: Decimal precision (default: 2)
      "minRange": 0, // Required: Minimum zoom range (0-100)
      "maxRange": 100, // Required: Maximum zoom range (0-100)
      "seriesType": "bar", // Required: Chart type (line/bar from SeriesTypes)
      "showRangeSlider": false, // Optional: Shows zoom slider on dashboard (default: false)
      "showInDashboard": true, // Required: Display chart on dashboard
      "showInMetricTable": true, // Required: Show metric in the table
      "showBaseline": false, // Optional: Display baseline (default: false)
      "description": null, // Optional: Chart description (default: null)
      "aspectRatio": null, // Optional: Aspect ratio (default: null)
      "scaleMetric": true, // Optional: Scale Y-axis with projected population (default: true)
      "suppressBar": true, // Optional: Hide the first bar for bar series (default: false)
      "suppressXAxisLabel": true, // Optional: Hide X-axis labels (default: false)
      "showThreshold": true, // Optional: Show threshold line (default: false)
      "reverseXAxis": false, // Optional: Reverse X-axis for bar series (default: false)
      "aiPrompt": null, // Optional: Custom AI prompt (default: null)
      "highlightType": "none", // Optional: Highlight type (from HighlightType, default: "none")
      "optimizeResolution": false // Optional: Optimize resolution (default: true)
    }
  ],
  "datasetID": "", // Optional: Dataset ID (format: dataset_name/Sheet1)
  "dependentVariable": "TARGET", // Required: Dependent variable column name
  "filters": null, // Optional: Array of rule IDs (default: null)
  "isOffline": false, // Optional: Offline mode toggle (default: false)
  "numberOfRowsSentInAIPrompt": 10, // Optional: Rows sent to AI (default: 10)
  "percentTreated": null, // Optional: Current % treated value (default: null)
  "positivePolarityValues": ["1"], // Required: Positive values of dependent variable
  "projectedPopulation": null, // Optional: Population scaling value (default: null)
  "rules": [ // Optional: Array of rules (default: null)
    {
      "id": "29a827d4-35ac-410e-9a31-45203dc1bb18", // Required: Rule ID (UUID)
      "value": "abcd", // Required: Value (string/number/boolean/array)
      "operator": ">" // Required: Operator (from Operators enum)
    }
  ],
  "scores": [
    {
      "fieldName": "P (TARGET=1) Min", // Required: Model field name
      "fieldLabel": "Model 3", // Optional: Display name (default: fieldName)
      "sortOrder": "desc" // Optional: Sorting (asc/desc, default: "desc")
    }
  ],
  "showFiltersOnDashboard": false, // Optional: Show filter controls (default: false)
  "sliderAssociations": [
    {
      "sliderID": "29a827d4-35ac-410e-9a31-45203dc1bb18", // Required: Slider ID
      "uswID": "d292c59c-e1f6-4f7e-ac53-525b7b6e6a56", // Required: Chart ID
      "showInDashboard": false // Optional: Show slider on dashboard (default: false)
    }
  ],
  "sliders": [
    {
      "id": "29a827d4-35ac-410e-9a31-45203dc1bb18", // Required: Slider ID (UUID)
      "name": "Cost of contact", // Required: Slider name
      "description": null, // Optional: Description (default: null)
      "min": 0, // Required: Minimum value
      "max": 100, // Required: Maximum value
      "value": 10, // Required: Current value
      "label": "coc" // Optional: Display label (default: null)
    }
  ],
  "title": "Targeted Marketing", // Optional: Dashboard title (default: null)
  "variableSelectors": null, // Optional: Variable aliases (default: null)
  "version": "2.3", // Optional: Config version (latest: 2.3, default: 1.0)
  "xAxisName": "Percent treated" // Optional: X-axis label (default: "Percent treated")
};
```

## **Common Issues**
1. **Mismatch in column names:** Ensure that the number of column names matches the dataset shape.  
2. **Invalid model type:** Ensure that the model conforms to the `ScikitModel` interface and implements a scoring function e.g `predict_proba` method.  
3. **Authentication failure:** Double-check credentials and the Gooder AI endpoint URL.
4. **Dataset size limits:** If you encounter size-related errors, adjust the `max_size_uploaded_data` or `max_size_saved_data` parameters.
5. **Model naming issues:** Ensure that the `model_names` list has the same length as the `models` list to avoid default naming.


## Loading specific configs: 
```python 
from gooder_ai.configs import load_uber_config

config = load_uber_config()
```

This config can be used to create view
            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "gooder-ai",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.11",
    "maintainer_email": null,
    "keywords": "MLvaluation, modelvaluation, ML valuation, model valuation",
    "author": "Eric Siegel",
    "author_email": "eric@predictionimpact.com",
    "download_url": "https://files.pythonhosted.org/packages/59/bf/e3d9cb0dd5c23ff2aa29698f4c702813ded998a4eba17df5dbccf22973df/gooder_ai-1.2.6.tar.gz",
    "platform": null,
    "description": "# Gooder AI Package\n\nThis package provides a streamlined way to ~evaluate~ valuate machine learning models on the **Gooder AI platform**. It exports a simple yet powerful function, **`valuate_model`**, which is designed to work with **scikit-learn-like models** and:\n\n- **Authenticates** users with [Gooder.ai](https://latest.gooder.ai).  \n- **Validates and uploads** model configuration and dataset for secure storage and processing.\n- **Creates or updates** a shared \"view\" on [Gooder.ai](https://latest.gooder.ai), allowing users to interactively visualize and analyze their model performance.\n\n## Installation\nInstall the package using pip:\n\n```bash\npip install gooder_ai\n```\n\n## Usage\n\nHere's an example invocation of the `valuate_model` function:\n\n```python\nimport numpy as np\nfrom some_ml_library import SomeModel  # Replace with an actual ML model library\nimport asyncio\n\n# Define a dummy scikit-learn-like model\nclass DummyModel:\n    def predict_proba(self, X):\n        return np.random.rand(len(X), 2)  # Simulate probabilities for 2 classes\n    \n    classes_ = np.array([0, 1])  # Define class labels\n\n# Instantiate the model\nmodel = DummyModel()\n\n# Create dummy dataset\nx_data = np.random.rand(100, 5)  # 100 samples, 5 features\ny = np.random.randint(0, 2, 100)  # Binary classification labels (0 or 1)\n\n# Authentication credentials (optional)\nauth_credentials = {\n    \"email\": \"user@example.com\",\n    \"password\": \"securepassword123\"\n}\n\n# Configuration dictionary\nconfig = {\n    \"param1\": \"value1\",\n    \"param2\": \"value2\"\n}\n\n# View metadata\nview_meta = {\n    \"mode\": \"public\",\n    \"dataset_name\": \"test_dataset\"\n}\n\n# Column names (optional)\ncolumn_names = {\n    \"dataset_column_names\": [\"feature1\", \"feature2\", \"feature3\", \"feature4\", \"feature5\"],\n    \"score_column_names\": [\"prob_class_0\", \"prob_class_1\"],\n    \"dependent_variable_name\": \"target\"\n}\n\n# AWS variables (optional)\naws_variables = {\n    \"api_url\": \"https://api.gooder.ai\",\n    \"bucket_name\": \"gooder-ai-bucket\"\n}\n\n# Model names (optional)\nmodel_names = [\"model1\", \"model2\"]\n\n# Run the async function\noutput = asyncio.run(valuate_model(\n    models=[model],\n    x_data=x_data,\n    y=y,\n    auth_credentials=auth_credentials,\n    config=config,\n    view_meta=view_meta,\n    model_names=model_names,\n    column_names=column_names,\n    aws_variables=aws_variables,\n    max_size_uploaded_data=10,  # Limit uploaded data to 10MB\n    max_size_saved_data=1000     # Limit saved data to 1000MB\n))\n\nprint(output)  # Output: {'view_id': 'some-id', 'view_url': 'https://gooder.ai/some-id'}\n```\n\n## Function Parameters\n\n### `valuate_model(**kwargs)`\nThe `valuate_model` function takes the following input arguments:\n\n1. **`models: list[ScikitModel]`**  \n   - Machine learning models that follow the `ScikitModel` protocol.  \n   - It must have a scoring function (e.g., `predict_proba`), which is used to generate probability scores for classification.  \n   - It must also have a `classes_` attribute, representing the possible target classes.\n\n2. **`x_data: ndarray | DataFrame | list[str | int | float] | spmatrix`**  \n   - A dataset containing the input features for evaluation.  \n   - This is the dataset that will be fed into the model for prediction.\n\n3. **`y: ndarray | DataFrame | list[str | int | float] | spmatrix`**  \n   - A dataset representing the true target values (labels) corresponding to `x_data`.  \n   - This helps in validating model performance.\n\n4. **`auth_credentials: Credentials`**  \n   - A dictionary with user authentication details for the Gooder AI platform.  \n   - Structure:\n     ```python\n     {\n         \"email\": str,  # User's email\n         \"password\": str  # User's password\n     }\n     ```\n   - These credentials are used for authentication to upload the dataset and configuration. It is optional if `upload_data_to_gooder = False` and `upload_config_to_gooder = False`.\n\n5. **`config: dict`**  \n   - A dictionary containing model configuration settings.  \n   - This is validated against Gooder AI's schema before being uploaded.\n\n6. **`view_meta: ViewMeta`**  \n   - A dictionary containing metadata about the \"view\" (shared result visualization) being created or updated.  \n   - Structure:\n     ```python\n     {\n         \"mode\": Optional[\"public\" | \"protected\" | \"private\"],  # Access control\n         \"view_id\": Optional[str],  # ID of an existing view (if updating)\n         \"dataset_name\": Optional[str]  # Name of the dataset (defaults to timestamp)\n     }\n     ```\n   - If `view_id` is provided, an existing view is updated; otherwise, a new one is created.\n\n7. **`column_names: ColumnNames = {}`** *(optional)*  \n   - A dictionary specifying the column names for the dataset and scores.  \n   - Structure:\n     ```python\n     {\n         \"dataset_column_names\": Optional[list[str]],  # Feature names\n         \"score_column_names\": Optional[list[str]],  # Column names for model scores\n         \"dependent_variable_name\": Optional[str]  # Name of the target variable\n     }\n     ```\n\n8. **`included_columns: list[str] = []`** *(optional)*  \n   - A list of names specifying which columns to include in the dataset before visualizing the scores on the Gooder platform.  \n\n9. **`aws_variables: AWSVariables = {}`** *(optional)*  \n   - A dictionary containing AWS-related variables. \n   - Used for authentication and file uploads.\n   - Structure:\n     ```python\n     {\n         \"api_url\": Optional[str],\n         \"app_client_id\": Optional[str],\n         \"identity_pool_id\": Optional[str],\n         \"user_pool_id\": Optional[str],\n         \"bucket_name\": Optional[str],\n         \"base_url\": Optional[str],\n         \"validation_api_url\": Optional[str]\n     }\n     ```\n   - Defaults to global values if not provided.\n\n10. **`model_names: list[str]`**\n   - This property is used to label the score columns in the output dataset and configuration.\n   - If not provided default names are generated based on model class names.\n   - Example: For a model that outputs binary classification scores, a column named \"model1_score, model2_score\" will be created.\n\n11. **`max_size_uploaded_data: int = 10`** *(optional)* \n   - Defines the maximum allowed memory size (in megabytes, MB) for the combined dataset when uploading to Gooder AI.\n   - Before uploading, the function calculates the memory usage of the full dataset.\n   - If the dataset exceeds this threshold and `upload_data_to_gooder` is `True`, the operation is aborted and an exception is raised.\n   - This is a safety limit to prevent large uploads that could impact performance or exceed platform limits.\n   - Default value is 10MB, which is suitable for most use cases.\n   - Increase this value if you need to work with larger datasets, but be aware of potential performance implications.\n\n12. **`max_size_saved_data: int = 1000`** *(optional)* \n   - Defines the maximum allowed memory size (in megabytes, MB) for the combined dataset when saving locally.\n   - Before saving, the function calculates the memory usage of the full dataset.\n   - If the dataset exceeds this threshold and `upload_data_to_gooder` is `False`, the operation is aborted and an exception is raised.\n   - This is a safety limit to prevent excessively large local files that could impact system performance.\n   - Default value is 1000MB (approximately 1GB), which allows for much larger local datasets compared to uploads.\n   - Increase this value if you need to work with very large datasets locally, but be aware of system memory constraints.\n\n### Summary\n- The function takes a **scikit-learn model**, **dataset**, **user credentials**, and **configuration details**.\n- It authenticates with the Gooder AI platform, validates the config, and **uploads the dataset**.\n- Then, it either **creates a new shared view or updates an existing one**.\n- Finally, it **returns the view ID and URL**, allowing users to access model evaluation results.\n\n## Config\n\n# Chart Definition Configuration Example\n\nGiven below is an example chart/dashboard configuration for the Gooder AI app:\n\n```typescript\nconst config = {\n  \"activeFilter\": null, // Optional: ID of the active filter (default: null)\n  \"customChartLayoutMap\": {\n    \"xl\": [ // Layout for extra-large screens\n      {\n        \"i\": \"d292c59c-e1f6-4f7e-ac53-525b7b6e6a56\", // Chart ID\n        \"x\": 0, // X position (grid units)\n        \"y\": 0, // Y position (grid units)\n        \"w\": 11, // Width (grid units)\n        \"h\": 9, // Height (grid units)\n        \"moved\": false, // Optional: Whether the item has been moved (default: false)\n        \"static\": false // Optional: Whether the item is static (default: false)\n      },\n      // ... other xl layouts\n    ],\n    \"lg\": [ // Layout for large screens\n      // ... similar structure as xl\n    ],\n    \"md\": [ // Layout for medium screens\n      // ... similar structure as xl\n    ],\n    \"sm\": [ // Layout for small screens\n      {\n        \"i\": \"2db67e79-3c40-40c5-ae42-7d426fa37597\", // Chart ID\n        \"x\": 0,\n        \"y\": 36,\n        \"w\": 12,\n        \"h\": 12\n      }\n    ],\n    \"xs\": [ // Layout for extra-small screens\n      // ... similar structure as sm\n    ]\n  },\n  \"customCharts\": [\n    {\n      \"id\": \"74a92600-9334-4e57-afe5-2dbb61526547\", // Required: Unique chart ID (UUID)\n      \"dataInitializationCode\": \"data init script\", // Required: Script to initialize chart data\n      \"metricCalculationCode\": \"data calculate script\", // Required: Script to calculate metrics\n      \"metric\": \"Num responses\", // Required: Metric name (displayed on Y-axis)\n      \"title\": \"Response deciles\", // Optional: Chart title (default: null)\n      \"resolution\": 10, // Required: Number of data points/bins\n      \"unit\": \"none\", // Required: Y-axis unit (from UnitTypes enum)\n      \"decimalPlaces\": 2, // Optional: Decimal precision (default: 2)\n      \"minRange\": 0, // Required: Minimum zoom range (0-100)\n      \"maxRange\": 100, // Required: Maximum zoom range (0-100)\n      \"seriesType\": \"bar\", // Required: Chart type (line/bar from SeriesTypes)\n      \"showRangeSlider\": false, // Optional: Shows zoom slider on dashboard (default: false)\n      \"showInDashboard\": true, // Required: Display chart on dashboard\n      \"showInMetricTable\": true, // Required: Show metric in the table\n      \"showBaseline\": false, // Optional: Display baseline (default: false)\n      \"description\": null, // Optional: Chart description (default: null)\n      \"aspectRatio\": null, // Optional: Aspect ratio (default: null)\n      \"scaleMetric\": true, // Optional: Scale Y-axis with projected population (default: true)\n      \"suppressBar\": true, // Optional: Hide the first bar for bar series (default: false)\n      \"suppressXAxisLabel\": true, // Optional: Hide X-axis labels (default: false)\n      \"showThreshold\": true, // Optional: Show threshold line (default: false)\n      \"reverseXAxis\": false, // Optional: Reverse X-axis for bar series (default: false)\n      \"aiPrompt\": null, // Optional: Custom AI prompt (default: null)\n      \"highlightType\": \"none\", // Optional: Highlight type (from HighlightType, default: \"none\")\n      \"optimizeResolution\": false // Optional: Optimize resolution (default: true)\n    }\n  ],\n  \"datasetID\": \"\", // Optional: Dataset ID (format: dataset_name/Sheet1)\n  \"dependentVariable\": \"TARGET\", // Required: Dependent variable column name\n  \"filters\": null, // Optional: Array of rule IDs (default: null)\n  \"isOffline\": false, // Optional: Offline mode toggle (default: false)\n  \"numberOfRowsSentInAIPrompt\": 10, // Optional: Rows sent to AI (default: 10)\n  \"percentTreated\": null, // Optional: Current % treated value (default: null)\n  \"positivePolarityValues\": [\"1\"], // Required: Positive values of dependent variable\n  \"projectedPopulation\": null, // Optional: Population scaling value (default: null)\n  \"rules\": [ // Optional: Array of rules (default: null)\n    {\n      \"id\": \"29a827d4-35ac-410e-9a31-45203dc1bb18\", // Required: Rule ID (UUID)\n      \"value\": \"abcd\", // Required: Value (string/number/boolean/array)\n      \"operator\": \">\" // Required: Operator (from Operators enum)\n    }\n  ],\n  \"scores\": [\n    {\n      \"fieldName\": \"P (TARGET=1) Min\", // Required: Model field name\n      \"fieldLabel\": \"Model 3\", // Optional: Display name (default: fieldName)\n      \"sortOrder\": \"desc\" // Optional: Sorting (asc/desc, default: \"desc\")\n    }\n  ],\n  \"showFiltersOnDashboard\": false, // Optional: Show filter controls (default: false)\n  \"sliderAssociations\": [\n    {\n      \"sliderID\": \"29a827d4-35ac-410e-9a31-45203dc1bb18\", // Required: Slider ID\n      \"uswID\": \"d292c59c-e1f6-4f7e-ac53-525b7b6e6a56\", // Required: Chart ID\n      \"showInDashboard\": false // Optional: Show slider on dashboard (default: false)\n    }\n  ],\n  \"sliders\": [\n    {\n      \"id\": \"29a827d4-35ac-410e-9a31-45203dc1bb18\", // Required: Slider ID (UUID)\n      \"name\": \"Cost of contact\", // Required: Slider name\n      \"description\": null, // Optional: Description (default: null)\n      \"min\": 0, // Required: Minimum value\n      \"max\": 100, // Required: Maximum value\n      \"value\": 10, // Required: Current value\n      \"label\": \"coc\" // Optional: Display label (default: null)\n    }\n  ],\n  \"title\": \"Targeted Marketing\", // Optional: Dashboard title (default: null)\n  \"variableSelectors\": null, // Optional: Variable aliases (default: null)\n  \"version\": \"2.3\", // Optional: Config version (latest: 2.3, default: 1.0)\n  \"xAxisName\": \"Percent treated\" // Optional: X-axis label (default: \"Percent treated\")\n};\n```\n\n## **Common Issues**\n1. **Mismatch in column names:** Ensure that the number of column names matches the dataset shape.  \n2. **Invalid model type:** Ensure that the model conforms to the `ScikitModel` interface and implements a scoring function e.g `predict_proba` method.  \n3. **Authentication failure:** Double-check credentials and the Gooder AI endpoint URL.\n4. **Dataset size limits:** If you encounter size-related errors, adjust the `max_size_uploaded_data` or `max_size_saved_data` parameters.\n5. **Model naming issues:** Ensure that the `model_names` list has the same length as the `models` list to avoid default naming.\n\n\n## Loading specific configs: \n```python \nfrom gooder_ai.configs import load_uber_config\n\nconfig = load_uber_config()\n```\n\nThis config can be used to create view",
    "bugtrack_url": null,
    "license": null,
    "summary": null,
    "version": "1.2.6",
    "project_urls": null,
    "split_keywords": [
        "mlvaluation",
        " modelvaluation",
        " ml valuation",
        " model valuation"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "8260b7be909b38b751aa9432588db3a72eebdd60a07ed7b7642133f202964624",
                "md5": "9fbafbde588f1ad9f1bbb55c3a41015a",
                "sha256": "5347722fbb0c6aa0fc5dea29e0c8d6201cdd8601da6963600212a5be6a35ee56"
            },
            "downloads": -1,
            "filename": "gooder_ai-1.2.6-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "9fbafbde588f1ad9f1bbb55c3a41015a",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.11",
            "size": 26782,
            "upload_time": "2025-04-18T07:20:37",
            "upload_time_iso_8601": "2025-04-18T07:20:37.440240Z",
            "url": "https://files.pythonhosted.org/packages/82/60/b7be909b38b751aa9432588db3a72eebdd60a07ed7b7642133f202964624/gooder_ai-1.2.6-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "59bfe3d9cb0dd5c23ff2aa29698f4c702813ded998a4eba17df5dbccf22973df",
                "md5": "9034b2adb02aeefffb1c894311262eba",
                "sha256": "84066311c53d74b4fd1a133f26531a8c945e37c31da276ae9ba12da9ef76a0db"
            },
            "downloads": -1,
            "filename": "gooder_ai-1.2.6.tar.gz",
            "has_sig": false,
            "md5_digest": "9034b2adb02aeefffb1c894311262eba",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.11",
            "size": 24223,
            "upload_time": "2025-04-18T07:20:38",
            "upload_time_iso_8601": "2025-04-18T07:20:38.674745Z",
            "url": "https://files.pythonhosted.org/packages/59/bf/e3d9cb0dd5c23ff2aa29698f4c702813ded998a4eba17df5dbccf22973df/gooder_ai-1.2.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-04-18 07:20:38",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "gooder-ai"
}
        
Elapsed time: 0.57038s